2016-08-04 29 views
0

我正在使用來自Intel Site的交叉編譯環境併成功編譯了使用它的其他幾個庫(libsndfile,alsa,fftw),但是當我嘗試編譯portaudio時,它拒絕鏈接到正確的目錄。這裏是我得到的錯誤:針對英特爾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 

它似乎是試圖鏈接到我的電腦正常libstdC++,我不知道爲什麼。我試着用正確的目錄來修改LDFLAG的變體,並重新安裝了工具鏈和我的所有multilib,但沒有運氣。

回答

0

我也遇到了這個問題,最簡單的方法是在同一命令行上執行sudo su之後再次獲取環境文件,然後執行make install。

這裏是我跟着交叉編譯portaudio英特爾愛迪生步驟:

  1. 下載交叉編譯愛迪生工具鏈-20150120-linux64.tar.bz2和腳本toolchain-20140724-linux64.sh從這個link

  2. 提取工具鏈,運行腳本(你可以把它放在你的home目錄的地方,如果你願意的話),併成立了交叉編譯環境

$ 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 
  • 檢查你的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 
    

    配置,編譯和安裝portaudio:

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

    我很驚訝,沒有人抓住這個,但也很難找到正確的答案在其他地方,儘管看到許多其他人有類似(未解決的問題)。答案非常簡單,我很尷尬,我忽略了它,但是在這裏它可能是其他人可以找到的。

    make install如果交叉編譯SDK位於/opt或您不屬於的其他地方,則需要root權限。但是... sudo不保留我爲工具鏈設置的環境變量!非常簡單,也su -m不按我認爲的方式工作。工作解決方案如下:

    1. 只需在您的主目錄中的某處安裝SDK即可。你現在有寫權限,問題解決了。
    2. root身份運行一個命令同時保護環境:su -m <yourUserName> -c '$CC main.cpp -lfoo -lbar ...'

    在NUMER 2的關鍵是-m後的用戶名,至少在我的系統而忽略了用戶名有沒有產生錯誤的,但未能保持自己的環境。