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

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

我正在使用 gcc 在我的 CI 服务器上编译一个 C++ 应用程序(http://ci.berboe.co.uk) 并且由于它编译的 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

完整日志可在此处查看: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

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

答案1

  • 安装 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

例如对于libstdc++.so库。find应该报告一些您可以添加到LD_LIBRARY_PATH环境变量的路径。

答案2

有两种选择可能工作:

  1. 通过运行安装ia32-libssudo apt-get install ia32-libs。这只是一种预感,它可能有效,也可能无效。
  2. 另一个解决方案是在虚拟机上安装 32 位 Linux 来编译代码。

此链接可能有帮助:-http://en.sfml-dev.org/forums/index.php?topic=6034.0

答案3

您最好制作一个 i386 chroot。 mk-sbuild(在 ubuntu-dev-tools 中)并使schroot这些非常容易管理。

相关内容