我在将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下找到这个动态库搜索路径和轮胎加载但没有找到它们链接?
也许我应该在这里改变一些事情?但是如果我将我的应用程序分发给其他一些在这个特定位置没有库的计算机。如何在Xcode包中包含动态库以便始终可以找到。
我知道我可能在很多问题上添加了。但是想知道如何最好地解决这个问题?最好静态或动态链接,然后如何正确实现这一点,避免此错误。
更新
.dylib
时,只有在我将此库目录的路径添加到Runpath Search Paths
时,它才有效。 .a
时,它似乎在.dylib
不在同一目录中时工作(我将.a
库移动到/static
子目录中然后为此移动的库错误不再显示。但是当同一目录中有 .a 和 .dylib 库时,是不是可以静态链接? 答案 0 :(得分:1)
最后,我将这个Xcode macOS项目与多个动态C库(.dylib)相关联。
备注
为了与静态库链接(.a)它们不能与动态库并排放置! path/project_name/outputs/lib/apple/*.dylib
然后在路径下放置静态库:path/project_name/outputs/lib/apple/static/.a
如果XCode在构建设置中库搜索路径中找到它们,则会尝试链接动态库。
XCODE中的动态C图书馆链接
答案 1 :(得分:1)
我知道这是一个老问题,但它是搜索谷歌搜索&#34; Xcode静态链接时的最佳结果之一。&#34;
我最近在与英特尔IPP集成时遇到了这个问题,英特尔IPP将静态库和动态库放在同一目录中。
如果我使用标准Xcode链接方法通过&#34; Build Phases |添加库Link Binary with Libraries,&#34; Xcode将该UI转换为如下所示的命令行:
clang++ ... -L/my/path -lstatic1 -lstatic2 ...
但是这会导致链接器更喜欢DLL而不是同一目录中的静态库。
我通过删除&#34; Build Phases |中的条目解决了这个问题Link Binary with Libraries&#34;窗口,并在&#34;构建设置|中添加库的完整相对路径其他链接器标志&#34;项:
../../path/to/lib/libstatic1.a ../../path/to/lib/libstatic2.a
这导致Xcode将UI转换为如下所示的命令行:
clang++ ... ../../path/to/lib/libstatic1.a ../../path/to/lib/libstatic1.a ...
静态链接库。