正确的Xcode设置

Proper Xcode settings

本文关键字:设置 Xcode      更新时间:2023-10-16

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

应用程序的结构如下:

我有一个静态链接库(.a),两个动态链接库(.dlib),它依赖于静态链接库,一个动态库(.dlib),它取决于这两个动态库和使用这一个动态库可执行二进制文件(.dlib.)

在Xcode中,我转到"Xcode->Preferences->Derived Data(Advanced)"更改了输出目录。在那里我选择了"自定义->相对于工作区"。这样,所有的东西都会放在一个地方。

现在的问题是:我很难将".a"库添加到一个".dylib".中

我在Xcode窗口的左上角选择了一个目标,以便显示构建属性。然后在"搜索"窗口中,我键入了"其他链接器标志"。然后,我在"构建设置窗口"中选择了"其他链接器标志",并键入了"-ldbinterface.a"。在试图编译时,我遇到了一个错误:"ld:library not found for-libdbinterface-a"。

接下来,我尝试添加以下行:"-L/Users/igorkorot/dbhandler/dbhandler/Build/Products/Debug"到"其他链接器标志"。但我也犯了同样的错误。

接下来,我尝试删除这两行,并在"其他链接器标志"中添加"libdbinterface.a"。这次我得到了:"clang:error:没有这样的文件或目录"。

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

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. 编译动态库时,符号默认隐藏设置为(在生成设置代码生成下),并且只通过使用注释方法来显示要导出的符号:

    __attribute__ ((visibility ("default")))
    

你通常会用宏来做:

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

在函数/变量声明中,只有使用以下形式:

extern EXPORT void aFunction(int someParam);

注意:Objective-C类不需要这样做,但C++可能需要这样做(我记不清了)。