所以我花了过去 20 个小时试图让 boost 在 OS X 10.8 下工作,我终于让它编译没有错误,但是当我尝试编译一个使用 Boost.test 的测试用例时,我又回来了在一个受伤的世界。我应该提一下,我自己编译 boost 而不是使用可用的二进制文件的原因是因为我想使用 c++11 和 libc++。
当我编译 boost 时,我这样调用 b2:
./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-std=c++11 -stdlib=libc++" link=static
它编译所有文件。然后我有这段代码
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Addition
#include <boost/test/unit_test.hpp>
int addition(int i, int j)
{
return i + j;
}
BOOST_AUTO_TEST_CASE(universeInOrder)
{
BOOST_CHECK(addition(2, 2) == 4);
}
我尝试用它编译
clang++ -std=c++11 -stdlib=libc++ -g -Wall -v -I/Users/cb/Downloads/boost_1_51_0 tests/arithmetic.cpp -o tests/arithmetic /Users/cb/Downloads/boost_1_51_0/stage/lib/libboost_unit_test_framework.a`
它惨遭失败,给了我这个错误:
"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.8.0 -o tests/arithmetic /var/folders/pg/4wcxn1j12c3188vqrv0x4w9r0000gn/T/arithmetic-UFmO1B.o /Users/cb/Downloads/boost_1_51_0/stage/lib/libboost_unit_test_framework.a -lc++ -lSystem /usr/bin/../lib/clang/4.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
"boost::unit_test::unit_test_main(bool (*)(), int, char**)", referenced from:
_main in arithmetic-UFmO1B.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
起初,我认为这是因为 boost 不是针对 64 位编译的,所以我尝试告诉 b2 专门这样做,但这没有任何区别,而且我还认为它在 OS X 上默认编译为 64 位。
关于它为什么失败以及我如何让它工作的任何想法?