Скомпилируйте и используйте boost 1.51.0 на Mac OS X 10.8

Итак, я потратил последние 20 часов, пытаясь заставить boost работать под OS X 10.8, и, наконец, я получил его для компиляции без ошибок, но когда я пытаюсь скомпилировать тестовый пример, использующий Boost.test, я снова возвращаюсь в мире боли.
Я должен отметить, что причина, по которой я компилирую себя, вместо того, чтобы использовать бинарный файл, заключается в том, что я хочу использовать 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 сделать это специально, но это не имело никакого значения, и я также думаю, что он компилируется для 64-битной версии по умолчанию в OS X.

Любые идеи относительно того, почему это терпит неудачу и как я заставляю это работать?

2

Решение

Похоже, плохая компиляция теста. Вы запросили

#define BOOST_TEST_DYN_LINK

но чем вы связываете статическую версию boost.test

/Users/cb/Downloads/boost_1_51_0/stage/lib/libboost_unit_test_framework.a

и IIRC существует разница между статической и динамической версиями этой библиотеки. Таким образом, либо связать динамическую версию библиотеки (тот, с .so расширение), или удалите это определение.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]