与我自己的静态库链接的问题

Posted

技术标签:

【中文标题】与我自己的静态库链接的问题【英文标题】:Issues Linking with my own static library 【发布时间】:2014-05-14 17:34:08 【问题描述】:

我正在从事一个涉及构建三个不同可执行文件的项目。与其创建三个单独的 Xcode 项目,我想我会将所有源代码保存在一个项目中,并为二进制文件使用不同的目标。它们都碰巧需要相同的源文件集(一个用 C 编写的加密库),我为它们添加了一个静态库目标,它似乎能够很好地编译它们。

我的问题是我正在处理其中一个可执行文件并尝试与该库链接时,我不断收到“ld: symbol(s) not found for architecture x86_64”错误。我已经编译了库并将其添加到相关目标的构建阶段设置中的“Target Dependencies”、“Link Binary with Libraries”和“Copy Headers”(或相关的头文件)中。 Xcode 让我包含库(只是“encryption.h”),但构建再次失败。有什么建议么?我对使用 Xcode 进行 C++ 开发还比较陌生,所以我可能会遗漏一些明显的东西。

【问题讨论】:

【参考方案1】:

这里可能会发生一些问题。

首先,确保在您的库构建设置中设置了“x86_64”。

您的构建设置应如下所示:

其次,如果你想在 Objective-C 应用程序中包含你的 C++ 库,你需要add some extra "magic" to your library's .h header files。

#ifdef __cplusplus
extern "C" 
#endif

这样做将允许您的 Objective-C 代码在您的库中找到非 C++ 损坏的符号。

【讨论】:

我的 Xcode 版本 (5.1.1) 实际上没有那个特定设置,我能得到的最接近的是设置为我当前操作系统 (10.9.2) 的目标 SDK。这是我想检查的东西,所以很高兴你提到了它,但我认为还有其他事情发生

以上是关于与我自己的静态库链接的问题的主要内容,如果未能解决你的问题,请参考以下文章

将静态库链接到共享库(例如openmp)是一个好主意

如何提供支持静态链接的 cmake 包(又名 Config.cmake)

OpenCV静态库编译与链接

linux自己写的静态库gcc报错

静态库链接时的依赖关系和先后顺序

如何链接自定义静态库?