ld:为 macOS-x86_64 构建但试图 link 使用为 macOS-x86_64 构建的文件
ld: building for macOS-x86_64 but attempting to link with file built for macOS-x86_64
我有一个奇怪的问题,创建/使用静态库在我的 Ubuntu 虚拟机中有效,但在 macOS 中无效:
ld: warning: ignoring file ./dist/libXXXX.a, building for macOS-x86_64 but attempting to link with file built for macOS-x86_64
创建静态库的命令是:
ar rcs libtest.a obj1.o obj2.o ...
编译器调用:
gcc -g -Wall -Wextra main.c -L./dist -lXXXX -o main
在 google 上搜索没有产生任何可用的结果,除了关于 SO 的这个(可能)相关问题:
Possible related question
在查看我自动创建静态库的脚本后,我找到了罪魁祸首:
出于某种原因,我的工具为头文件创建了目标文件(产生了像 header.h.o
这样的文件)。
删除那些解决了问题。
当我直接将这些目标文件而不是将它们收集到静态库中时,问题就解决了,即,
gcc -g -Wall -Wextra main.c obj1.o obj2.o -o main
之后又收到了很多类似ld: warning: object file (obj1.o) was built for newer macOS version (11.0) than being linked (10.14)
的警告,不过是警告,对象是链接的,所以问题解决了。
根本原因是某些库将 -mmacosx-version-min=10.14
传递给 gcc,因此目标文件是为 10.14 构建的,但我的 macos 现在是 11.0。
如果您想让事情正常进行,请尝试直接使用目标文件而不是创建静态库。
如果你想解决所有的警告,找到``-mmacosx-version-min`并评论它。
我发现我的存储库中包含一些存档
rm -rf ./**/*.a
rm -rf ./**/.o
make
解决了我的问题
我有一个奇怪的问题,创建/使用静态库在我的 Ubuntu 虚拟机中有效,但在 macOS 中无效:
ld: warning: ignoring file ./dist/libXXXX.a, building for macOS-x86_64 but attempting to link with file built for macOS-x86_64
创建静态库的命令是:
ar rcs libtest.a obj1.o obj2.o ...
编译器调用:
gcc -g -Wall -Wextra main.c -L./dist -lXXXX -o main
在 google 上搜索没有产生任何可用的结果,除了关于 SO 的这个(可能)相关问题:
Possible related question
在查看我自动创建静态库的脚本后,我找到了罪魁祸首:
出于某种原因,我的工具为头文件创建了目标文件(产生了像 header.h.o
这样的文件)。
删除那些解决了问题。
当我直接将这些目标文件而不是将它们收集到静态库中时,问题就解决了,即,
gcc -g -Wall -Wextra main.c obj1.o obj2.o -o main
之后又收到了很多类似ld: warning: object file (obj1.o) was built for newer macOS version (11.0) than being linked (10.14)
的警告,不过是警告,对象是链接的,所以问题解决了。
根本原因是某些库将 -mmacosx-version-min=10.14
传递给 gcc,因此目标文件是为 10.14 构建的,但我的 macos 现在是 11.0。
如果您想让事情正常进行,请尝试直接使用目标文件而不是创建静态库。
如果你想解决所有的警告,找到``-mmacosx-version-min`并评论它。
我发现我的存储库中包含一些存档
rm -rf ./**/*.a
rm -rf ./**/.o
make
解决了我的问题