当使用this question中引用的“lazy-lz”链接选项“-lazy-lz”来延迟依赖动态库的加载时,链接器是Xcode 7.2.1(Apple LLVM版本7.0.2(clang-700.1)的一部分0.81)),生成此错误:为什么懒链接选项会导致clang“非法数据引用”错误?
ld: illegal data reference to __ZN9WBRefSpecD1Ev in lazy loaded dylib
...其中错位C++符号指的是在我的单级dylib类析构函数:_WBRefSpec ::〜WBRefSpec()
我不能t找到任何地方的直接参考,以指出这个错误可能意味着什么 - 或者可能导致它的原因。
在cpp文件,析构函数定义为:
EXPORT WBRefSpec::~WBRefSpec(void)
{
ClearEntireRefSpec(); // commenting out this call doesn't affect error message!
}
...其中EXPORT是通常的:
#define EXPORT __attribute__((visibility("default")))
...当然,在头文件中定义作为该课程的公众成员:
〜WBRefSpec(void);
任何人见过这个或有线索是什么原因导致此错误?
EDIT /解答:
答案数据非法参考的是,有一个与所定义的类成员函数声明的cpp文件“静态WBRefSpec FOO;”删除了,和宾果,没有链接错误。
(删除链接的详细信息,因为他们不相关的问题)
发布您如何构建/链接您的完整程序,请 – xaxxon
dylib可能需要将非惰性指针与另一个指针绑定才能工作。 –
@xaxxon - 发布链接设置(某些路径“已消毒”)。我是否应该格式化它以包装更好的可读性? – SMGreenfield