g ++ flto和undefined references

时间:2015-06-07 08:34:18

标签: c++ g++

我有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表示“符号是弱符号”

我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

在未找到的内容与我在图书馆中看到的符号之间存在符号差异。我重新编译了库,链接成功了。