2016-08-04 119 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后的用户名,至少在我的系统而忽略了用户名有没有产生错误的,但未能保持自己的环境。