我在 OS X 上使用 Xcode 使用 Boost 库。 Boost 使用 macports 安装在我的系统上。通过将我需要的 3 个 boost 库(例如 libboost_thread-mt.a)添加到 Targets“Link Binary With Libraries”列表中,我已成功构建了我的应用程序。但是,我需要静态链接这些库,以便该应用程序可以在其他计算机上运行,而无需安装 boost 库。
我到底该怎么做呢?通过大量的谷歌搜索,我发现我可能需要添加“-static”——我应该在 Xcode 中的哪里添加它?
如果您已链接到.a
库,那么你已经静态链接了。您永远不需要运送.a
图书馆。它们只是一堆物体。
EDIT:您的错误强烈表明您正在链接 dylib 而不是 .a。如果你有libfoo.dylib
and libfoo.a
在你的库路径中,即使你说“链接libfoo.a
“ 在 Xcode 中,即使libfoo.a
在搜索路径的较早位置,它仍然会链接libfoo.dylib
。这是因为 Xcode 的链接完全损坏并通过-lfoo
到链接器(你不应该使用-l
对于你构建的东西并且有确切的路径)。我总是建议链接您内置的库LDFLAGS
在 xcconfig 文件中而不是使用构建窗格。您传递您想要的确切路径而不是使用-l
. See 放弃构建面板 http://robnapier.net/blog/build-system-1-build-panel-360了解更多我对 xcconfig 的想法。它现在已经过时了,因为它是为 Xcode3 编写的,但基础知识仍然适用。
使用构建窗格,您还可以将整个路径传递到“其他链接器标志”中的库。但这仍然存在构建窗格的所有问题。
更快(但不太稳健)的解决方案有时是添加-Wl,-search_paths_first
到“其他链接器标志”。这改变了行为,以便每个库路径都被搜索.dylib
and .a
在继续之前(默认行为是到处搜索.dylib
然后才搜索.a
)。所以如果你的.a
与您的目录位于不同的目录中.dylib
,并且该目录位于搜索路径的较早位置,这将起作用。
这个问题终于让我开了一个radar http://openradar.appspot.com/radar?id=1580401在这方面,我几年前就应该这样做。我建议其他人打开重复项 http://blackpixel.com/blog/1558/radar-or-gtfo/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)