Xcode 6.3 上架构 x86_64 的未定义符号
Undefined symbols for architecture x86_64 on Xcode 6.3
我正在完成一个开源 C 编码的 CometD 库,我认为向像我这样的 OSX/iOS 用户开放它是个好主意。
为了减轻 OSX/iOS 开发人员的工作,我想从静态 C 库切换到 Xcode iOS 静态库。所以我遵循了网上的建议,生成了一个静态 iOS 兼容库。
问题是,每次我尝试使用它时,都会收到类型错误:
Undefined symbols for architecture x86_64:
******, referenced from:
-********** in *******.a(*******.o)
我库中的几乎每个 C 函数都会重复此错误。
首先我想也许图书馆不是 x86_64 compatible
、空的,或者里面真的没有任何 x86_64 符号。
所以我在图书馆查了 "lipo -info",答案是:
为了确保我还在库中使用了 "nm -arch x86_64",并获取了 Xcode 报告为错误的几个未定义函数。我以为我会错,除了猜猜什么也没发现?
我找到了符号:
所以我的问题是:
If the symbols are present in a x86_64 compatible library, why Xcode prompting this error ? Even if I compiling the library for all arm*/s types I am still getting this x86_64 error.
我是没有意识到什么还是我只是做错了?
您的回答总是值得赞赏。
更新(这是Xcode项目的link):https://github.com/GhostGumm/CometD-x86_64-issue
更新 2:Trojanfoe 先生引起了我的注意,因为我在编译时遇到了 linking 警告。事实上,linker 似乎错过了加载库以寻找不存在的目录。将库移动到正确的目录后,手动 linking 它,x86_64 错误消失了。
遗憾的是问题仍然存在。编译成功后,我尝试使用 lib ,但是,当我 "alloc" 和 "init" 我的主要 class 像这样:
ZetaFactory *Client = [[ZetaFactory alloc] init];
x86_64 错误以十亿个太阳的真正凶猛咆哮着回归。
我将 link 发布到 Xcode 项目,请随时测试它,因为我对如何修复它没有更多的想法,但更重要的是为什么以及在哪里会出现错误。
None越少我会继续调查
我下载并尝试构建您的项目。查看 link 错误 - 例如 init_stack_remove_data 未找到 - 它们是正确的。您的项目源中的任何地方都没有 init_stack_remove_data 的定义。
在您上面引用的 "nm -arch x86_64" 输出中,请注意函数定义前的 "U" 表示该函数的 use,而不是它的定义。 nm 输出显示 linker 是正确的 - 这些函数由您的代码调用,但从未定义。定义它们后,您会在 nm 输出中的函数前看到 "T"。
您需要使用其余必要的源更新您的项目才能link没有错误。
我正在完成一个开源 C 编码的 CometD 库,我认为向像我这样的 OSX/iOS 用户开放它是个好主意。
为了减轻 OSX/iOS 开发人员的工作,我想从静态 C 库切换到 Xcode iOS 静态库。所以我遵循了网上的建议,生成了一个静态 iOS 兼容库。
问题是,每次我尝试使用它时,都会收到类型错误:
Undefined symbols for architecture x86_64: ******, referenced from: -********** in *******.a(*******.o)
我库中的几乎每个 C 函数都会重复此错误。
首先我想也许图书馆不是 x86_64 compatible
、空的,或者里面真的没有任何 x86_64 符号。
所以我在图书馆查了 "lipo -info",答案是:
为了确保我还在库中使用了 "nm -arch x86_64",并获取了 Xcode 报告为错误的几个未定义函数。我以为我会错,除了猜猜什么也没发现?
我找到了符号:
所以我的问题是:
If the symbols are present in a x86_64 compatible library, why Xcode prompting this error ? Even if I compiling the library for all arm*/s types I am still getting this x86_64 error.
我是没有意识到什么还是我只是做错了?
您的回答总是值得赞赏。
更新(这是Xcode项目的link):https://github.com/GhostGumm/CometD-x86_64-issue
更新 2:Trojanfoe 先生引起了我的注意,因为我在编译时遇到了 linking 警告。事实上,linker 似乎错过了加载库以寻找不存在的目录。将库移动到正确的目录后,手动 linking 它,x86_64 错误消失了。
遗憾的是问题仍然存在。编译成功后,我尝试使用 lib ,但是,当我 "alloc" 和 "init" 我的主要 class 像这样:
ZetaFactory *Client = [[ZetaFactory alloc] init];
x86_64 错误以十亿个太阳的真正凶猛咆哮着回归。 我将 link 发布到 Xcode 项目,请随时测试它,因为我对如何修复它没有更多的想法,但更重要的是为什么以及在哪里会出现错误。
None越少我会继续调查
我下载并尝试构建您的项目。查看 link 错误 - 例如 init_stack_remove_data 未找到 - 它们是正确的。您的项目源中的任何地方都没有 init_stack_remove_data 的定义。
在您上面引用的 "nm -arch x86_64" 输出中,请注意函数定义前的 "U" 表示该函数的 use,而不是它的定义。 nm 输出显示 linker 是正确的 - 这些函数由您的代码调用,但从未定义。定义它们后,您会在 nm 输出中的函数前看到 "T"。
您需要使用其余必要的源更新您的项目才能link没有错误。