我有4.9.2的编译行来构建可执行文件:
g++ -std=c++11 -Wno-multichar -O3 -DNDEBUG -flto -rdynamic -lboost_unit_test_framework CMakeFiles/systems_test.dir/one_variant_rule.cpp.o ../common_parsers/libcommon_parsers.so -o systems_test
这是链接错误:
/tmp/ccI7Hs6Q.ltrans0.ltrans.o:ccI7Hs6Q.ltrans0.o:function blitzq::systems_test::systems_test_suite::test_1_variant_rule_metafct::test_method(): error: undefined reference to 'blitzq::one_or_many_parser<boost::spirit::basic_istream_iterator<char, std::char_traits<char> >, unsigned long, boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::standard> >, 0l> >::one_or_many_parser()'
collect2: error: ld returned 1 exit status
当我使用nm来查看符号是否确实在共享库中定义时
nm -C ../common_parsers/libcommon_parsers.so
我发现它有两次出现,一次是T,一次是W。
根据nm的手册页,T表示“符号在文本(代码)部分”,但W表示“符号是弱符号”
我不知道如何解决这个问题。
答案 0 :(得分:0)
在未找到的内容与我在图书馆中看到的符号之间存在符号差异。我重新编译了库,链接成功了。