ld:为 macOS-x86_64 构建,但尝试链接为 macOS-x86_64 构建的文件

d3L*_*d3L 3 gcc ld

我有一个奇怪的问题,创建/使用静态库在我的 Ubuntu VM 中有效,但在 macOS 上无效:

ld: warning: ignoring file ./dist/libXXXX.a, building for macOS-x86_64 but attempting to link with file built for macOS-x86_64
Run Code Online (Sandbox Code Playgroud)

创建静态库的命令是:

ar rcs libtest.a obj1.o obj2.o ...
Run Code Online (Sandbox Code Playgroud)

编译器调用:

gcc -g -Wall -Wextra main.c -L./dist -lXXXX -o main
Run Code Online (Sandbox Code Playgroud)

在谷歌上搜索没有产生任何可用的结果,除了这个(可能)相关的问题:

可能的相关问题

ted*_*ner 7

我意识到这是一篇旧帖子,您找到了解决方法,但让我将其发布在这里,供其他遇到此问题且这些答案无法提供解决方案的人使用。

您可能会在不知不觉中使用两种不同的工具链,一种来自 Apple(通过 Xcode 安装),另一种来自 GNU(通过 Home-brew 或 MacPorts 安装)。如果您键入ranlib --version并看到版本信息显示该版本ranlib是 GNU,则很可能是这种情况。

确保它/usr/bin出现在您的$PATH before /usr/local/bin/opt/local/bin. 当您运行时which -a ranlib,列表中的第一个/usr/bin/ranlib结果应该是. 相同which -a ar- 第一个结果应该是/usr/bin/ar。如果不是这样,您需要修复您的$PATH.

一旦你修复了你的路径并清理了你的项目,尝试再次构建,事情应该可以正常工作。