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

Linker errors with Boost on Mac (OSX 10.10.02 | Xcode 6.1.1)

最近我开始在 Windows 项目中使用 Boost。它需要是 cross-platform,所以我也将它安装在 Mac 上。很遗憾;每当我将它添加到 Xcode 项目时,它都会给我大量的 linker-errors 和 conversion-warnings.

linker-errors之一的示例:

Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from: ___cxx_global_var_init2 in main.o boost::asio::error::get_system_category() in main.o boost::system::error_code::error_code() in main.o "boost::system::generic_category()", referenced from: ___cxx_global_var_init in main.o ___cxx_global_var_init1 in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

conversion-warnings之一的示例:

In file included from /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: warning: implicit conversion loses integer precision: 'long' to 'hour_type' (aka 'int') [-Wshorten-64-to-32] time_duration(h,0,0)

试了几种安装方法和配置方法,还是不行

这些是我的步骤:

  1. 编译 Boost 或获取 Boost 的编译版本。
  2. 创建一个 XCode 项目。
  3. 在main中输入this示例代码class.
  4. 将 header 和库路径添加到 Xcode 项目文件。
  5. 构建。

我试过的编译选项:

我尝试过的配置选项:

  1. 将 header 搜索路径设置为 /usr/local/Cellar/boost/1.57.0/include 或等效项 将库搜索路径设置为 /usr/local/Cellar/boost/1.57.0/lib 或等效项。
  2. 只设置 header 搜索路径而不设置库路径。
  3. 选项 1 但递归(导致更多错误)。

如果有人能指出正确的方向,我将不胜感激。我认为这与 Xcode 有关,因为所有编译版本都会给我同样的错误。

我找到了答案。在将 header- 和库路径添加到项目搜索路径后,您需要转到 "Build Phases"。在那里,您需要将所需的各个库添加到 "link libraries to binary" 小节。您可以在 lib 文件夹(在 boost 文件夹中)中找到必要的文件。

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