我正在尝试在我的机器上构建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
答案 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
路径的顺序,并确保您想要的路径首先......