2016-08-04 14 views
0

Ich benutze die Cross-Compile-Environemt aus der Intel Site und haben erfolgreich mehrere andere Bibliotheken mit ihm (libsndfile, alsa, fftw) kompiliert, aber wenn ich versuche, portaudio zu kompilieren, weigert es sich, die richtigen Verzeichnisse zu verknüpfen . Hier wird der Fehler erhalte ich:Kreuz kompilieren portAudio für Intel Edison

if test -n " bindings/cpp" ; then for dir in " bindings/cpp"; do make -C $dir all; done ; fi 
make[1]: Entering directory '/home/theslat/Downloads/portaudio/bindings/cpp' 
Making all in lib 
make[2]: Entering directory '/home/theslat/Downloads/portaudio/bindings/cpp/lib' 
/bin/sh ../libtool --tag=CXX --mode=link i586-poky-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer --sysroot=/usr/edison/sysroots/core2-32-poky-linux -O2 -pipe -g -feliminate-unused-debug-types -version-info 0:12:0 -no-undefined -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -o libportaudiocpp.la -rpath /usr/local/lib BlockingStream.lo CallbackInterface.lo CallbackStream.lo CFunCallbackStream.lo CppFunCallbackStream.lo Device.lo DirectionSpecificStreamParameters.lo Exception.lo HostApi.lo InterfaceCallbackStream.lo MemFunCallbackStream.lo Stream.lo StreamParameters.lo System.lo SystemDeviceIterator.lo SystemHostApiIterator.lo ../../../lib/libportaudio.la 
libtool: link: i586-poky-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer --sysroot=/usr/edison/sysroots/core2-32-poky-linux -fPIC -DPIC -shared -nostdlib /usr/edison/sysroots/core2-32-poky-linux/usr/lib/crti.o /usr/edison/sysroots/core2-32-poky-linux/usr/lib/i586-poky-linux/4.9.1/crtbeginS.o .libs/BlockingStream.o .libs/CallbackInterface.o .libs/CallbackStream.o .libs/CFunCallbackStream.o .libs/CppFunCallbackStream.o .libs/Device.o .libs/DirectionSpecificStreamParameters.o .libs/Exception.o .libs/HostApi.o .libs/InterfaceCallbackStream.o .libs/MemFunCallbackStream.o .libs/Stream.o .libs/StreamParameters.o .libs/System.o .libs/SystemDeviceIterator.o .libs/SystemHostApiIterator.o -Wl,-rpath -Wl,/home/theslat/Downloads/portaudio/lib/.libs -Wl,-rpath -Wl,/usr/local/lib ../../../lib/.libs/libportaudio.so -L/usr/edison/sysroots/x86_64-pokysdk-linux/usr/bin/i586-poky-linux/../../lib/i586-poky-linux/gcc/i586-poky-linux/4.9.1 -L/usr/edison/sysroots/x86_64-pokysdk-linux/usr/bin/i586-poky-linux/../../lib/i586-poky-linux/gcc -L/usr/edison/sysroots/core2-32-poky-linux/lib -L/usr/edison/sysroots/core2-32-poky-linux/usr/lib/i586-poky-linux/4.9.1 -L/usr/edison/sysroots/core2-32-poky-linux/usr/lib /usr/lib/libstdc++.so -lm -lc -lgcc_s /usr/edison/sysroots/core2-32-poky-linux/usr/lib/i586-poky-linux/4.9.1/crtendS.o /usr/edison/sysroots/core2-32-poky-linux/usr/lib/crtn.o -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign --sysroot=/usr/edison/sysroots/core2-32-poky-linux -O2 -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-soname -Wl,libportaudiocpp.so.0 -o .libs/libportaudiocpp.so.0.0.12 
/usr/lib/libstdc++.so: error adding symbols: File in wrong format 
collect2: error: ld returned 1 exit status 
make[2]: *** [Makefile:311: libportaudiocpp.la] Error 1 
make[2]: Leaving directory '/home/theslat/Downloads/portaudio/bindings/cpp/lib' 
make[1]: *** [Makefile:333: all-recursive] Error 1 
make[1]: Leaving directory '/home/theslat/Downloads/portaudio/bindings/cpp' 
make: *** [Makefile:251: all-recursive] Error 2 

Es scheint, wie es gegen meinen Computer normale libstdC++ zu verbinden versucht, und ich weiß nicht, warum. Ich habe versucht, configure eine Vielzahl von LDFLAG mit den richtigen Verzeichnissen zu feedin und habe die Toolchain und alle meine multilibs aber kein Glück neu installiert.

Antwort

0

Ich lief auch in dieses Problem und der einfachste Weg ist, die Umwelt-Datei wieder nach dem Ausführen eines sudo su auf der gleichen Befehlszeile Quelle und dann eine make installieren.

Hier sind die Schritte, die ich zu überqueren folgen Portaudio für Intel Edison kompilieren:

  1. edison-Toolchain-20150120-linux64.tar.bz2 und das Skript toolchain-20140724-linux64.sh den Cross-Compiler herunterladen von diesem link

  2. der Toolchain-Extrakt, führen Sie das Skript (Sie es in Ihrem Home-Verzeichnis irgendwo, wenn Sie möchten setzen können) und eingerichtet, um die Quer kompilieren Umwelt

$ tar -xvf edison-toolchain-20150120-linux64.tar.bz2 
$ chmod +x toolchain-20140724-linux64.sh 
$ ./toolchain-20140724-linux64.sh 
$ source /opt/poky-edison/1.6/environment-setup-core2-32-poky-linux 
  1. Schauen Sie sich die Umgebung auf der Shell:
$ echo $CC 
$ i586-poky-linux-gcc -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer --sysroot=/opt/poky-edison/1.6/sysroots/core2-32-poky-linux 

konfigurieren, kompilieren und installieren Portaudio:

$ ./configure 
$ make 
$ sudo su 
# source /opt/poky-edison/1.6/environment-setup-core2-32-poky-linux 
# make install 
0

Ich bin überrascht, dass niemand das packte, aber auch, dass es schwierig war, irgendwo anders die richtige Antwort zu finden, obwohl ich viele andere Leute mit ähnlichen (ungelösten Problemen) sah. Die Antwort ist ehrlich gesagt so einfach, dass es mir peinlich ist, dass ich es übersehen habe, aber hier ist es vielleicht so, dass jemand anderes es finden kann.

make install erforderlich root privilages, wenn das Cross-Compile-SDK in /opt oder woanders Sie nicht besitzen. Aber ... sudo bewahrt nicht die Umgebungsvariable, die ich für die Toolchain eingerichtet hatte! Sehr einfach, auch su -m funktioniert nicht so, wie ich es dachte. Arbeitslösungen wie folgt:

  1. Installieren Sie das SDK einfach irgendwo in Ihrem Home-Verzeichnis. Sie haben jetzt Schreibrechte, Problem gelöst.
  2. einen einzigen Befehl als root ausführen, während die Erhaltung der Umwelt: su -m <yourUserName> -c '$CC main.cpp -lfoo -lbar ...'

Der Schlüssel in numer 2 ist der Benutzername nach -m, zumindest auf meinem System der Benutzername dort keine Fehler produziert Weglassen aber nicht mein erhalten Umgebung.

Verwandte Themen