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

标签 c++ operating-system xcode5 clang linker-errors

我正在尝试使用最新的 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/

相关文章:

Python SARIMA 模型自动使用 CPU 的所有核心。如何?

c++ - 如何确保 std::vector 分配的内存在解除分配后返回给操作系统?

ios - 使用 iOS 6/7 Deltas 时 UIWebView 变得太大

c++ - 使流布局适应 Qt 表

c++ - 你如何理解一大段代码?

c++ - QVector(or std::vector) reserve(or resize) down 不释放内存

c++ - 无法解决 opencv 代码中的 malloc 错误

c - 使用 FUSE 在 C 中编写一个简单的文件系统

ipad - iPad 上的应用程序测试不起作用 : process launch failed: NotFound

ios - 收到通知时在标签栏项目上设置角标(Badge)