gpt4 book ai didi

c++ - Xcode 3.2.6 和 4 链接器错误 ld :bad codegen, pointer diff in ... to global weak symbol

转载 作者:太空狗 更新时间:2023-10-29 21:29:14 25 4
gpt4 key购买 nike

我在使用 Xcode 3.2.6 和 Xcode 4 时遇到非常奇怪的错误。

Xcode 3.2.5 在我的项目中没有错误。

默认情况下隐藏的符号选项设置为 YES。

这些链接错误与模板类中的静态成员(指针)有关。有什么想法、要检查的编译器/链接器 key 吗?

最佳答案

这与您编译的库中的符号可见性有关。 GCC 4.0 开关 -fvisibility=hidden 选项旨在隐藏 DSO/共享对象库的符号以减少链接/加载时间。但是,我在网上看到一些博客在编译静态库时以某种奇特的方式使用了开关。我实际上还无法找出这是什么效果或意图。据我所知,静态库需要为您打算从外部使用的函数公开符号信息。

我在使用 boost::exceptions 时遇到了同样的链接器错误。然而,为了捕获特定类型的异常,GCC 需要类型信息,但这是一个运行时问题。因此,即使它编译/链接正确,如果您打算从库外部捕获异常,那么在您的项目中隐藏符号信息不是正确的解决方案。请参阅 Apple 的文档:

If your symbol uses runtime type identification (RTTI) information, exceptions, or dynamic casts for an object that is defined in another library, your symbol must be visible if it expects to handle requests initiated by the other library. For example, if you define a catch handler for a type in the C++ standard library, and you want to catch exceptions of that type thrown by the C++ standard library, you must make sure that your typeinfo object is visible.

来源:http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html

我实际上需要使用此处描述的宏守卫修改异常 header 以使我的项目编译和链接:http://gcc.gnu.org/wiki/Visibility .即使使用 -fvisibility=default,这也是必要的,这让我相信这是某种链接器错误。

尽管如此,我在这里记录了一个针对 Boost 的错误:https://svn.boost.org/trac/boost/ticket/4594#comment:11

你可以在这里找到我的配置:http://lists.boost.org/boost-users/2011/07/69251.php

关于c++ - Xcode 3.2.6 和 4 链接器错误 ld :bad codegen, pointer diff in ... to global weak symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353779/

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