c++ - 什么是 OSX 等同于 Linux g++-multilib 的?

标签 c++ macos compilation g++

我是新手,我正在尝试将 64 位编译文件链接到 32 位目标文件,但出现此错误:

ld: 警告:忽略文件 Estudiant.o,文件是为不受支持的文件格式构建的 ( 0x7f 0x45 0x4c 0x46 0x 1 0x 1 0x 1 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 )这不是被链接的架构(x86_64):Estudiant.o 体系结构 x86_64 的 undefined symbol :

我想我需要在 linux 中安装 g++-multilib,但我找不到 osx 的等效项。有谁知道如何解决这个问题?

最佳答案

在 Linux 和 OS X 上,您只能将所有 64 位目标文件和库链接在一起,或者将所有 32 位目标文件和库链接在一起。关于库,两个操作系统使用不同的方法来管理 32 位和 64 位的共存。

在 Linux 上,使用 multilib-approach,其中有相同库的 32 位和 64 位版本,通常具有相同的名称但位于两个不同的目录中,例如/lib 和/lib64。

在 OS X 上,使用 fat-binary 方法,其中单个库或可执行文件同时包含 32 位和 64 位目标文件,所有这些都在一个文件中(几年前会有库包含4 种不同的版本,PPC 32、PPC 64、x86 32、x86 64)。

这就是为什么在 OS X 上没有直接等同于 multilib 的原因,你没有多个库只是因为你需要 32 位和 64 位!

要构建应用程序,您需要始终将所有目标文件构建为 32 位或 64 位(就像在 Linux 上一样,您不能在任何一个系统上混用)然后,好吧,希望所有库使用包含(至少)您需要的版本。否则,您需要开始研究构建所需的库,但系统随附的大多数内容都应该同时支持 32 位和 64 位。

关于c++ - 什么是 OSX 等同于 Linux g++-multilib 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834235/

相关文章:

macos - NSTextView:何时自动插入字符(如自动匹配括号)?

compilation - 如果在 C++ 或 C++/CLI 下以编程方式查找

c++ - 如何编译头文件、实现、驱动文件

C++ std::stringstream 操作优化

objective-c - Cocoa:如何以模式方式显示窗口?

python - 添加 Python 应用程序以接受传入的网络连接

c++ - 将源文件拆分为cpp和h后无法编译项目,得到 "undefined refernce to..."

c++ - 我们可以超越对象切片吗?

c++ - 重载基类函数

c++ - 双链表头节点始终将第一个值返回为 0