我在将我的macOS应用程序与C库链接时出现了一些问题。以下是与此问题相关的几个问题。
考虑到这将是非共享的自定义库,最好使用动态库还是静态库来链接应用程序?
我已经将我的macOS Xcode应用程序连接到了大约14个静态库.a上,它可以正常工作。我重新配置了CMakeLists.txt以使这些库,并且现在Xcode项目无法工作。主要更改是我更改的目录:
"$(SRCROOT)/../../c/<project_name>/outputs/lib/apple/static"
但是,现在我在同一个路径下拥有静态(.a)和动态(.dylib)库:"$(SRCROOT)/../../c/server/outputs/lib/apple"
我不知道这是否有影响,但是链接静态库会导致在运行我的Xcode项目后它抱怨无法加载lib.dylib,因此也许它在Library Search Paths下找到这个动态库并尝试加载它们,但无法找到它们的链接?
- 因此,我尝试将Xcode macOS应用程序链接到.dylib库,而不是静态的.a库,并将它们添加到“Link Binary with Libraries”中。问题是现在也出现找不到库的错误。
也许我应该在这里进行一些更改?但是如果我将我的应用程序分发给一些其他计算机,这些计算机将没有这些特定位置中的库。如何在Xcode包中包含动态库以始终可用。
我知道我可能提出了太多问题。但是想知道如何最好地解决这个问题?最好是静态链接还是动态链接,然后如何正确实现避免此错误。
更新
- 当链接
.dylib
时,似乎只有在将此库目录的路径添加到Runpath Search Paths
中时才起作用。 - 当我链接静态库
.a
时,看起来它工作正常,即使.dylib
不在同一目录中(我将.a
库移动到/static
子目录中),然后为这个移动后的库错误不再显示。但是,是否有一种方法可以在具有相同目录下的.a和.dylib库时进行静态链接?