构建涉及Boost(Ubuntu)的Quantlib时出错

时间:2016-11-25 22:21:33

标签: boost quantlib

我正在尝试在我的机器上构建QuantLib 1.9(Xubuntu 16.04),我通过" sudo apt-get获得了Boost ...."

QuantLib编译正常,直到以下事件序列:

make[1]: Entering directory '/home/Downloads/packages/QuantLib-1.9/test-suite'

有两个调用libtool,第一个看起来像这样:

/bin/bash ../libtool --tag=CXX --mode=link g++ -g -O2 -o quantlib-test-suite

接着是近100个* .o文件,并以此字符串终止:

libUnitMain.la ../ql/libQuantLib.la -lboost_unit_test_framework

在那之后第二次调用libtool:

libtool: link: g++ -g -O2 -o .libs/quantlib-test-suite

后面跟着100 * .o文件,并以此字符串终止:

./.libs/libUnitMain.a ../ql/.libs/libQuantLib.so -lboost_unit_test_framework

这是出现错误的地方,然后构建失败:

 quantlibtestsuite.o: In function `make_test_case':
 /usr/include/boost/test/unit_test_suite_impl.hpp:255: undefined reference to boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
 /usr/include/boost/test/unit_test_suite_impl.hpp:255: undefined reference to `boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
 americanoption.o: In function `make_test_case':
 /usr/include/boost/test/unit_test_suite_impl.hpp:255: undefined reference to `boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
 /usr/include/boost/test/unit_test_suite_impl.hpp:255: undefined reference to `boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
 americanoption.o: In function `boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>)':
 /usr/include/boost/test/unit_test_suite_impl.hpp:255: undefined reference to `boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)'
 amortizingbond.o:/usr/include/boost/test/unit_test_suite_impl.hpp:255: more undefined references to `boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)' follow
 collect2: error: ld returned 1 exit status
 Makefile:1075: recipe for target 'quantlib-test-suite' failed
 make[1]: *** [quantlib-test-suite] Error 1
 make[1]: Leaving directory '/home/Downloads/packages/QuantLib-1.9/test-suite'
 Makefile:601: recipe for target 'all-recursive' failed
 make: *** [all-recursive] Error 1

1 个答案:

答案 0 :(得分:0)

您可能正在使用Boost版本进行编译,而您正在尝试与其他版本建立链接(您说您通过apt-get获得了Boost,该版本会安装到/usr,但是然后传递到主目录中的./configure路径。这可以解释为什么链接器在boost::unit_test::ut_detail中寻找不在库中的方法。

如果您想使用apt-get附带的Boost版本,则从调用./configure中删除提升路径应该会有效。如果要使用本地安装的那个,首先应检查实际上是否在/home/EmilioW/Downloads/boost_1_62_0/libs中编译了已编译的库。如果它们实际上存在,并且如果您不需要Boost用于其他内容,则可以使用apt-get来卸载打包版本。如果您需要同时安装,则必须检查编译器和链接器列出-I-L路径的顺序,并确保您想要的路径首先......