g++ flto 和未定义的引用
g++ flto and undefined references
我有 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
我发现它出现了 2 次,一次是 T,一次是 W。
根据 nm 的手册页,T 表示 "The symbol is in the text (code) section",但 W 表示 "The symbol is a weak symbol"
我不知道如何解决这个问题。
未找到的符号与我在库中看到的符号之间存在差异。我重新编译了库,链接成功了。
我有 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
我发现它出现了 2 次,一次是 T,一次是 W。
根据 nm 的手册页,T 表示 "The symbol is in the text (code) section",但 W 表示 "The symbol is a weak symbol"
我不知道如何解决这个问题。
未找到的符号与我在库中看到的符号之间存在差异。我重新编译了库,链接成功了。