linux - 为 Intel Edison 交叉编译 portAudio

标签 linux linker cross-compiling portaudio intel-edison

我正在使用 Intel Site 中的交叉编译环境并使用它成功编译了其他几个库(libsndfile、alsa、fftw),但是当我尝试编译 portaudio 时,它拒绝链接到正确的目录。这是我得到的错误:

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++,我不知道为什么。我已经尝试使用正确的目录输入 configure 各种 LDFLAG,并重新安装了工具链和我所有的 multilib,但没有成功。

最佳答案

我也遇到了这个问题,最简单的方法是在同一命令行上执行 sudo su 后再次获取环境文件,然后执行 make install。

以下是我为 intel edison 交叉编译 portaudio 所遵循的步骤:

  1. 从这个link 下载交叉编译器edison-toolchain-20150120-linux64.tar.bz2 和脚本toolchain-20140724-linux64.sh。

  2. 提取工具链,运行脚本(如果你愿意,可以将它放在你的主目录中的某个地方)并设置交叉编译环境

$ 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. 检查 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

关于linux - 为 Intel Edison 交叉编译 portAudio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38757594/

相关文章:

linker - "ld -Ttext"选项在做什么?

android - 在 getrrsetbyname.c 中交叉编译适用于 Android 的 OpenSSH 失败

在 Linux for Mac 上交叉编译简单的标准 C 程序

c - 结束 gcc C Linux 中第一个成功的线程

regex - 如何使用正则表达式匹配最长的字符串

python - 在 Python 中打开从 Linux 到 Windows 的 URL 命令

c++ - 与库链接相比,实现前端的优势

c++ - GCC和Clang链接错误: What is '__tls_get_addr@@GLIBC_2.3'

python - 在 Windows 到 Linux/OSX 中用 Python 交叉编译

python - 检查 Linux 发行版名称