gpt4 book ai didi

c++ - 与 OS X 10.10 的链接问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:12 24 4
gpt4 key购买 nike

我正在尝试使用最新的 Xcode 命令行工具在 OSX 10.10 中编译一些代码。编译有效,但链接是一场噩梦。首先,我得到一个符号被多次定义的错误。这个错误是正确的,但定义是相同的,并且在我无法控制的第 3 方库中。我不知道如何强制链接器忽略此问题。一个重要的注意事项是,相同的代码在 clang 和 gcc 下都可以在我的 Ubuntu 机器上完美地编译、链接和运行。此链接器问题仅在 OS X 下出现。库是静态的。

我遇到的第二个问题更奇怪。如果我只是为了编译和链接程序而删除了一些(必要的)功能,那么当我运行它时会收到以下有趣的消息:“dyld:未找到符号:__ZNSt12future_errorD1Ev”。这到底是怎么回事,我该如何解决?谷歌在这方面没有帮助。

最佳答案

好的,我已经尽我所能解决了这个问题。这是我学到的。首先,静态链接问题似乎无法在 OSX 上使用 Apple 的“特殊”版本的 Clang 来解决。除了编辑库的源代码之外,似乎没有办法告诉编译器忽略重复的符号定义。曾经有这样的选项(例如 -m),但它们都被弃用了一段时间。因此,为了解决这个问题,我必须至少将其中一个库设为动态。

第二个问题是由于我试图链接的库之一不知何故是针对 libstdc++ 编译的。但是,Apple 的 clang 想要默认针对 libc++ 编译所有内容。因此,问题是两个库之间的兼容性之一——std::future_error 在两个库和运行时(当我使用 libc++ 时)都有不同的损坏名称,无法找到来自 libstdc++ 的符号。这个问题的正确解决方案(我硬着头皮做了)是使用 libc++ 重新编译这个项目中的任何库,因为标准库的两个实现通常不兼容。

无论如何,我希望这最终对其他人有用。我发现令人难以置信的沮丧是 Apple 必须足够不同以确保在 Linux 下的多个编译器下完美运行的构建,在他们的自定义版本的 clang 下在他们的操作系统中可怕地崩溃。

关于c++ - 与 OS X 10.10 的链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26822506/

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