GCC/G++ 的交叉编译问题

hif*_*iks 6 compiling gcc cross-compilation

我正在使用 gcc 在我的 CI 服务器 ( http://ci.berboe.co.uk )上编译一个 C++ 应用程序,并且由于它编译的 vps 具有 x86-64 架构,我需要交叉编译以获得编译的程序可以在 x86 计算机上运行。

我已经安装了 gcc-multilib 和 g++-multilib 以及在其他地方建议的其他几个包,但是在尝试编译时仍然出现错误。这是:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

完整日志可在此处获得:http : //ci.berboe.co.uk/job/MCServer%20Linux-x86/11/console

对解决此问题的任何帮助将不胜感激。

编辑:

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation
Run Code Online (Sandbox Code Playgroud)

在解决了以前的问题后,我得到了这个。

小智 3

  • 安装 32 位库(ia32-libs在某些发行版中,在其他发行版中移至此: http: //wiki.debian.org/Multiarch/HOWTO,如果您需要的话,可以了解更多)。
  • 请务必将 i386 库路径添加到您的LD_LIBRARY_PATH环境中。多变的。(当然export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu也是如此)。
  • 请务必将 i386 包含路径添加到LD_INCLUDE_PATH环境变量中。

请随意查找这些库(当然安装后),使用:

find / -iname "*libstdc++.so*" 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

例如图书馆libstdc++.sofind应该报告一些您可以添加到LD_LIBRARY_PATH环境变量中的路径。