use*_*011 4 c++ linker boost unit-testing abi
我正在尝试使用boost来构建单元测试,但链接器抱怨缺少函数.拿这个骨架代码
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(TestFuncOps);
BOOST_AUTO_TEST_CASE(CopyConstructor)
{
}
BOOST_AUTO_TEST_SUITE_END();
Run Code Online (Sandbox Code Playgroud)
但它失败了
Undefined symbols for architecture x86_64:
"boost::unit_test::ut_detail::normalize_test_case_name[abi:cxx11](boost::unit_test::basic_cstring<char const>)", referenced from:
__GLOBAL__sub_I_funcopstest.cc in funcopstest.o
Run Code Online (Sandbox Code Playgroud)
该libboost_unit_test_framework
由我的链接器命令发现:
g++-5 --std=c++14 funcopstest.o -L/usr/local/lib -lboost_unit_test_framework -o test_funcops
Run Code Online (Sandbox Code Playgroud)
因为当拿走时-lboost_unit_test_framework
,我得到了大量未定义的引用,而不是只有一个.Boost是brew
使用c ++ 11模式从源代码安装的.我试图编译,-fabi-version=[0-8]
但每次都没有改变.
有人知道发生了什么事吗?
添加-D_GLIBCXX_USE_CXX11_ABI=0
到您的CPPFLAGS
,然后重新编译.
gcc 5附带的libstdc ++必须对C++ 11 进行一些更改std::string
并std::list
与之保持一致.为了向后兼容,它支持双ABI,但默认使用新的ABI.
您的libboost_unit_test_framework.so似乎是在不支持新的(可能使用gcc 4.x)的情况下编译的,因此在编译代码时,编译器将生成期望与支持新代码的库链接的代码.在两个ABI不同的情况下,符号将丢失.定义_GLIBCXX_USE_CXX11_ABI
宏0
使gcc 5使用旧的库代码.
或者,您可以使用gcc 5重建Boost.Test.
归档时间: |
|
查看次数: |
2356 次 |
最近记录: |