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)
试了几种安装方法和配置方法,还是不行
这些是我的步骤:
- 编译 Boost 或获取 Boost 的编译版本。
- 创建一个 XCode 项目。
- 在main中输入this示例代码class.
- 将 header 和库路径添加到 Xcode 项目文件。
- 构建。
我试过的编译选项:
- 使用 the official guide 从源代码编译。
- 使用我在 Whosebug 上找到的一些脚本从源代码编译。
- 正在安装 brew 包管理器并下载带有二进制文件的包。
我尝试过的配置选项:
- 将 header 搜索路径设置为 /usr/local/Cellar/boost/1.57.0/include 或等效项
将库搜索路径设置为 /usr/local/Cellar/boost/1.57.0/lib 或等效项。
- 只设置 header 搜索路径而不设置库路径。
- 选项 1 但递归(导致更多错误)。
如果有人能指出正确的方向,我将不胜感激。我认为这与 Xcode 有关,因为所有编译版本都会给我同样的错误。
我找到了答案。在将 header- 和库路径添加到项目搜索路径后,您需要转到 "Build Phases"。在那里,您需要将所需的各个库添加到 "link libraries to binary" 小节。您可以在 lib 文件夹(在 boost 文件夹中)中找到必要的文件。
您可以选择扩展名为 .a 或扩展名为 .mt.dylib 的库文件。如果您选择 .a 扩展文件,库将被添加到程序的编译版本中。如果您选择 .mt.dylib 文件,那么这些库将不会添加到您编译的程序中。在这种情况下,您假设动态库文件已经存在于计算机 运行 程序中。
最近我开始在 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)
试了几种安装方法和配置方法,还是不行
这些是我的步骤:
- 编译 Boost 或获取 Boost 的编译版本。
- 创建一个 XCode 项目。
- 在main中输入this示例代码class.
- 将 header 和库路径添加到 Xcode 项目文件。
- 构建。
我试过的编译选项:
- 使用 the official guide 从源代码编译。
- 使用我在 Whosebug 上找到的一些脚本从源代码编译。
- 正在安装 brew 包管理器并下载带有二进制文件的包。
我尝试过的配置选项:
- 将 header 搜索路径设置为 /usr/local/Cellar/boost/1.57.0/include 或等效项 将库搜索路径设置为 /usr/local/Cellar/boost/1.57.0/lib 或等效项。
- 只设置 header 搜索路径而不设置库路径。
- 选项 1 但递归(导致更多错误)。
如果有人能指出正确的方向,我将不胜感激。我认为这与 Xcode 有关,因为所有编译版本都会给我同样的错误。
我找到了答案。在将 header- 和库路径添加到项目搜索路径后,您需要转到 "Build Phases"。在那里,您需要将所需的各个库添加到 "link libraries to binary" 小节。您可以在 lib 文件夹(在 boost 文件夹中)中找到必要的文件。
您可以选择扩展名为 .a 或扩展名为 .mt.dylib 的库文件。如果您选择 .a 扩展文件,库将被添加到程序的编译版本中。如果您选择 .mt.dylib 文件,那么这些库将不会添加到您编译的程序中。在这种情况下,您假设动态库文件已经存在于计算机 运行 程序中。