【问题标题】:Error building Quantlib involving Boost (Ubuntu)构建涉及 Boost (Ubuntu) 的 Quantlib 时出错
【发布时间】:2016-11-25 22:21:33
【问题描述】:

我正在尝试在我的机器(Xubuntu 16.04)上构建 QuantLib 1.9,并且我通过“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

【问题讨论】:

  • 安装的 Boost 版本是什么,您给 ./configure 打的电话是什么?
  • 我通过以下命令行参数配置:sudo ./configure --with-boost-include=/home/EmilioW/Downloads/boost_1_62_0 --with-boost-lib=/home/EmilioW/下载/boost_1_62_0/libs config.log 文件比较大,这里就不放了。一旦脚本尝试编译测试套件,我只会看到错误。

标签: boost quantlib


【解决方案1】:

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

如果您想使用 apt-get 附带的 Boost 版本,从对 ./configure 的调用中删除 boost 路径应该可以使其正常工作。如果你想使用你本地安装的那个,你应该首先检查你在/home/EmilioW/Downloads/boost_1_62_0/libs中是否真的有编译好的库。如果它们确实存在,并且如果您不需要 Boost 进行其他操作,则可以使用 apt-get 卸载打包版本。如果您需要同时安装两者,则必须检查编译器和链接器列出 -I-L 路径的顺序,并确保您想要的路径排在第一位...

【讨论】:

  • 嗨 Luigi,我必须从其他 Boost 版本中清除我的系统。 IE。在这种情况下你是对的。我想从源头构建所有内容,但我在更早的时候犯了 apt-get Boost 的错误。删除没有正确清洁系统。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多