无法将 macOS-arm64 的库与 macOS-arm64 的可执行文件链接

Cannot link library for macOS-arm64 with executable for macOS-arm64

提问人:FuzzyBall 提问时间:2/27/2022 更新时间:5/9/2022 访问量:1758

问:


我在 **Monterey M1 MacBook** 上创建构建系统时遇到了一些麻烦:

到目前为止,我有一个有效的 Makefile 来构建和链接库。
(简化:所有.cpp文件都变成 .o 文件→ >
效果很好
g++ -car -r <.o files> libmyLibrary.a

问题:
当我尝试构建一个使用上述 .源文件的编译工作正常,但我收到以下(看似无意义的)链接器警告:
libmyLibrary.a

ld: warning: ignoring file /Path/to/lib/libmyLibrary.a,
building for macOS-arm64 but attempting to link with file built for macOS-arm64

→我得到一些Undefined symbols for architecture arm64: ... <stuff from library> referenced from: <stuff from executable>

为与库相同的目标进行构建怎么会成为问题?

C G++ 静态 错误链接器 警告

评论

1赞 Paul Sanders 2/27/2022
报告什么?file libmyLibrary.a
0赞 FuzzyBall 2/28/2022
makefile 执行ar -r /path/to/lib/libmyLibrary.a src/stl.hpp.gch <lots of .o files> -> ar: creating archive /path/to/lib/libmyLibrary.a
0赞 FuzzyBall 2/28/2022
ar -t libmyLibrary.a列表:__.SYMDEF, stl.hpp.gch, all the .o files
1赞 Paul Sanders 2/28/2022
老鼠,不是我所希望的。你还有文件吗?如果是这样,在其中一个上运行将告诉您它包含什么架构。如果没有,您可以从库中提取它们,然后执行。.ofilear
1赞 Paul Sanders 2/28/2022
嗯,看起来不错。我认为你应该向我们展示你的 Makefile。我个人不使用 make,但我相信这里有人这样做。当然,我必须问你:为什么不使用 Xcode?我正在做你正在做的事情(尽管在我的情况下,我正在构建一个胖二进制文件),而且它工作正常。

答:

1赞 FuzzyBall 2/28/2022 #1

在更改链接库的方式后,我设法编译了可执行文件。我的 Makefile 还链接了一个预编译的头文件。.pch

删除它后,它工作正常。

评论

1赞 Paul Sanders 3/2/2022
有趣。如果这是根本原因,则来自非常无用的错误消息。ld
6赞 George Morgan 5/9/2022 #2

这是由于系统中安装了不兼容的版本所致。 在自制软件中,binutils 似乎被破坏了。这可以通过符号链接来解决 ,或使用系统。ararllvm-ararar

评论

0赞 Carlos Granados 6/13/2022
这是正确的答案。如果您看到此消息,则必须破坏系统中的程序。我跑了,然后用了,错误消失了arbrew install llvm@12llvm-arar