我有Xcode 5.1.1,我正在尝试创建一个项目来构建我的OSX应用程序。
申请表的结构如下:
我有一个静态链接库(.a),2个动态链接库(.dylib),它依赖于静态的,1个动态库(.dylib)依赖于那些2个动态库和使用的可执行二进制文件那1个动态库(.dylib)。
在Xcode中,我通过转到“Xcode - > Preferences-> Derived Data(Advanced)”来更改输出目录。在那里我选择了“Custom-> Relative to Workspace”。这样一切都将保存在一个地方。
现在问题是:我在将“.a”库添加到其中一个“.dylib”时遇到了困难。
我在Xcode窗口的左上角选择了一个目标,以便显示构建属性。然后在“搜索”窗口中输入“其他链接器标志”。然后我在“Build Settings Window”中选择了“Other Linker Flags”并输入“-ldbinterface.a”。试图编译我得到一个错误:“ld:找不到-llibdbinterface.a的库”。
接下来,我尝试添加以下行:“ - L / Users / igorkorot / dbhandler / dbhandler / Build / Products / Debug”到“Other Linker Flags”。但我得到了完全相同的错误。
接下来,我尝试删除这两行,并将“libdbinterface.a”添加到“Other Linker Flags”。这次我得到了:“铿锵:错误:没有这样的文件或目录”。
作为参考,该文件确实存在:
self.array = list(map(float,input(' Please insert an array: ').split(',')))
我做错了什么?在我的情况下添加静态库的正确方法是什么?
谢谢。
答案 0 :(得分:1)
如果静态库的文件名是:
libdbinterface.a
然后,您需要通过删除前导-l
和文件扩展名(lib
)将其指定给.a
链接器选项:
-ldbinterface
但是我发现前面的麻烦是因为我认为你可能会发现重复的符号定义(链接器错误或运行时问题),因为静态库中的符号将出现在两个动态库中。
有两种解决方法:
使用默认隐藏的符号设置为是(在构建设置> 代码生成下)编译动态库)并且仅通过使用以下方法注释方法来公开要导出的符号:
__attribute__ ((visibility ("default")))
你可以正常使用宏:
#define EXPORT __attribute__ ((visibility ("default")))
并且在函数/变量声明中仅使用此表单:
extern EXPORT void aFunction(int someParam);
注意:您不需要为Objective-C类执行此操作,但您可能需要使用C ++(我不记得了)。