Mac上Boost的链接器错误(OSX 10.10.02 | Xcode 6.1.1)

时间:2015-02-24 12:49:13

标签: c++ xcode macos boost

最近,我开始在Windows上使用Boost进行项目。它需要是跨平台的,所以我也在Mac上安装它。不幸;每当我将它添加到Xcode项目时,它都会给我一大堆链接器错误和转换警告。

其中一个链接器错误的示例:

  

架构x86_64的未定义符号:
  " boost :: system :: system_category()",引自:         main.o中的___cxx_global_var_init2         main.o中的boost :: asio :: error :: get_system_category()         main.o中的boost :: system :: error_code :: error_code()" boost :: system :: generic_category()",引自:         在main.o中___cxx_global_var_init         main.o中的___cxx_global_var_init1 ld:找不到架构x86_64 clang的符号:错误:链接器命令失败并带有退出代码   1(使用-v查看调用)

其中一个转化警告示例:

  

包含来自的文件   /usr/local/Cellar/boost/1.57.0/include/boost/date_time/posix_time/posix_time_types.hpp:16:   /usr/local/Cellar/boost/1.57.0/include/boost/date_time/posix_time/posix_time_duration.hpp:24:21:警告:隐式转换失去整数精度:' long'至   ' hour_type' (又名' int')[ - Wortorton-64-to-32]         TIME_DURATION(H,0,0)

我尝试了几种安装方法和配置方法,但它仍然无法正常工作。

这些是我的步骤:

  1. 编译Boost或获取Boost的编译版本。
  2. 创建一个XCode项目。
  3. 在主要课程中输入this示例代码。
  4. 将标题和库路径添加到Xcode项目文件中。
  5. 构建
  6. 我尝试过的编译选项:

    • 使用the official guide从源代码编译。
    • 使用我在Stackoverflow上找到的一些脚本从源代码编译。
    • 安装brew包管理器并下载包含二进制文件的包。

    我尝试过的配置选项:

    1. 将标题搜索路径设置为/usr/local/Cellar/boost/1.57.0/include或等效项 将库搜索路径设置为/usr/local/Cellar/boost/1.57.0/lib或等效项。
    2. 仅设置标题搜索路径,但不设置库路径。
    3. 选项1但递归(导致更多错误)。
    4. 如果有人能指出我正确的方向,我会非常感激。我认为它与Xcode有关,因为所有编译版本都会给我带来同样的错误。

1 个答案:

答案 0 :(得分:3)

我找到了答案。将标题和库路径添加到项目搜索路径后,您需要转到“构建阶段”。在那里,您需要将所需的各个库添加到“链接库到二进制”子部分。您可以在lib文件夹中找到必要的文件(在boost文件夹中)。

您可以选择扩展名为.a或扩展名为.mt.dylib的库文件。如果选择.a扩展名文件,则库将添加到程序的编译版本中。如果选择.mt.dylib文件,则库不会添加到已编译的程序中。在这种情况下,您假设动态库文件已经存在于运行该程序的计算机上。