gpt4 book ai didi

macos - 在 OS X Yosemite 上构建 binutils 的交叉编译

转载 作者:行者123 更新时间:2023-12-04 14:32:17 25 4
gpt4 key购买 nike

我正在尝试构建 binutils 以在 Mac OS X 上生成 MIPS 代码。

我从 http://www.theairportwiki.com/index.php/Building_a_cross_compile_of_GCC_for_MIPS_on_OS_X 找到了这个网站 ( How to build GCC 4.8.x on Mac OS X host for MIPS target ) ,并按照说明进行操作。

我从brew 安装了gcc-4.8,并安装了binutils 和gcc 的源代码。这是编译选项设置。

$ export CC=/usr/local/bin/gcc-4.8
$ export CXX=/usr/local/bin/g++-4.8
$ export CPP=/usr/local/bin/cpp-4.8
$ export LD=/usr/local/bin/gcc-4.8
$ export PREFIX=/opt/cross/gcc-mips
$ export CFLAGS=-Wno-error=deprecated-declarations

然后我配置并制作 bintuils。

问题是,在构建静态库之后,我收到一条错误消息,指出存档不是为 x86_64 构建的,然后我有一堆 undefined symbol 错误。

ignoring file ./../intl/libintl.a, file was built for archive which is not the architecture being linked (x86_64): ./../intl/libintl.a

Undefined symbols for architecture x86_64:
"__bfd_abort", referenced from:
_fix_new_internal in write.o
_size_seg in write.o

谷歌搜索发现我还需要从 https://github.com/tpoechtrager/osxcross/issues/11 设置 AR(存档)变量.我添加了 export AR=/usr/local/bin/gcc-ar-4.8,但我收到另一条错误消息,因为 gcc-ar-4.8 不工作。

/usr/local/bin/gcc-ar-4.8 
/usr/local/bin/gcc-ar-4.8: Cannot find plugin 'liblto_plugin.so'

再次谷歌搜索发现 gcc-ar 不适用于 Mac OS X ( https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56893 )。

gcc-ar is for use with newer GNU binutils only as that is the only ar which supports plugins.  
Apple's ar does not support plugins (though it could be made to; it will be a different plugin interface than the GNU BFD
plugin interface which GCC supports right now).

我刚刚在 /usr/local/Cellar/gcc48/4.8.4/libexec/gcc/x86_64-apple-darwin14.3.0/4.8.4 中创建了一个愚蠢的“liblto_plugin.so”文件目录来抑制错误消息,但在这种情况下,当我使用 /usr/bin/gcc-ar-4.8 获取时,它看起来像 /usr/ar 被调用相同的体系结构和 undefined symbol 错误。

如何解决这些问题?如何在 Mac OS X 上构建交叉编译工具(gcc 和 binutils)?

最佳答案

Mac OS X 的静态库生成器不是ar,而是libtool -static。关于此还有另一篇 SO 帖子 - Static library link issue with Mac OS X: symbol(s) not found for architecture x86_64 .

binutils 有多个静态链接的库。所以我把所有的ar rc命令都换成libtool -static -o来获取不会报错的静态库。

为此,我还必须进行两项修改。

  1. 有些库生成的libtool 脚本与Mac OS X 的libtool 冲突,我不得不重命名脚本。
  2. 一些对象文件不包含符号,我不得不删除对象。

然后我可以毫无问题地获取二进制文件。

关于macos - 在 OS X Yosemite 上构建 binutils 的交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com