【发布时间】:2013-10-26 05:55:50
【问题描述】:
我正在使用 ProtocolBuffers (libprotobuf) 和 Boost 的 ASIO 库编写一个简单的程序。我已经确定我需要链接 libprotobuf.a 和 libboost_system.a,它们都位于我系统上的 /usr/local/lib 中。
按照在多个地方找到的说明,我已将这两个 .a 文件添加到“构建阶段”下的“使用库链接二进制文件”列表中。两者都设置为“必需”。
当我构建时,这会产生一个链接器错误:
ld: library not found for -lprotobuf
如果我将以下内容(作为两个单独的行)添加到“构建设置”/“其他链接器标志”,那么问题就会消失:“-L”、“/usr/local/lib”。
我的问题是这个设置库搜索路径的 -L hack 是否真的是正确的方法。考虑到我已将它们添加到“Build Phases”/“Link Binary With Libraries”列表中,我不确定为什么 Xcode 没有获取这些库的位置。我原以为他们在这个列表中的存在足以让 Xcode 找出如何找到它们。这两个 .a 文件现在也显示在我项目的文件“树”中。
那么有没有比滥用“其他链接器标志”设置更好的方法来做到这一点?
我使用的是 Xcode 4.6.3。
【问题讨论】:
-
-L代表库搜索路径,您可以在项目设置中找到它。 -
谢谢,我知道 -L 对链接器意味着什么。您是指“搜索路径”下的“库搜索路径”值吗?我刚刚尝试过,它似乎确实有效 - 这是指定这一点的最佳方式吗?如果是这样,为什么不简单地将库添加到“使用库链接二进制文件”列表中就足够了?还是该列表不打算保存整个路径,而只是保存库名称,根据“库搜索路径”设置来实际定位库文件?
标签: c++ xcode boost linker static-libraries