繁体   English   中英

正确的 Xcode 设置

[英]Proper Xcode settings

我有 Xcode 5.1.1 并且正在尝试创建一个项目来为 OSX 构建我的应用程序。

该应用程序的结构如下:

我有一个静态链接库 (.a),2 个动态链接库 (.dylib),它依赖于静态库,1 个动态库 (.dylib),它依赖于这 2 个动态库和使用那 1 个动态库的可执行二进制文件库(.dylib)。

在 Xcode 中,我通过转到“Xcode ->Preferences->Derived Data (Advanced)”更改了输出目录。 在那里我选择了“自定义-> 相对于工作区”。 这样,所有内容都将保存在一个地方。

现在问题来了:我在将“.a”库添加到“.dylib”之一时遇到了困难。

我在 Xcode 窗口的左上角选择了一个目标,以便显示构建属性。 然后在“搜索”窗口中输入“其他链接器标志”。 然后我在“构建设置窗口”中选择了“其他链接器标志”并输入了“-ldbinterface.a”。 尝试编译时出现错误:“ld:未找到 -llibdbinterface.a 的库”。

接下来我尝试添加以下行:“-L/Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug”到“Other Linker Flags”。 但我得到了完全相同的错误。

接下来,我尝试删除这两行,并将“libdbinterface.a”添加到“其他链接器标志”。 这次我得到:“clang:错误:没有这样的文件或目录”。

作为参考,该文件确实存在:

Igors-MacBook-Air:Debug igorkorot$ pwd
/Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug
Igors-MacBook-Air:Debug igorkorot$ ls -la
total 384
drwxr-xr-x  3 igorkorot  staff     102 Mar 26 18:37 .
drwxr-xr-x@ 3 igorkorot  staff     102 Mar 26 18:36 ..
-rw-r--r--  1 igorkorot  staff  193528 Mar 26 18:37 libdbinterface.a

我究竟做错了什么? 在我的情况下添加静态库的正确方法是什么?

谢谢你。

如果静态库的文件名是:

libdbinterface.a

然后,您需要通过剥离前导lib和文件扩展名 ( .a ) 将其指定给-l链接器选项:

-ldbinterface

但是,我看到了前面的问题,因为我认为您可能会发现重复的符号定义(链接器错误或运行时问题),因为来自静态库的符号将出现在两个动态库中。

有两种方法可以解决:

  1. 使静态库动态化。
  2. 编译动态库,将Symbols Hidden By Default设置为Yes (在Build Settings > Code Generation 下),并仅通过使用以下方法注释方法来公开要导出的符号:

     __attribute__ ((visibility ("default")))

您通常会使用宏执行以下操作:

#define EXPORT __attribute__ ((visibility ("default")))

并且在函数/变量声明中只使用这种形式:

extern EXPORT void aFunction(int someParam);

注意:您不需要为 Objective-C 类执行此操作,但您可能需要为 C++ 执行此操作(我不记得了)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM