即使在其他库中定义了符号,也会出现“未定义的符号”链接器错误

时间:2015-07-26 14:12:10

标签: c++ gcc linker g++ static-libraries

我在链接静态库时遇到一种奇怪的链接器错误,以下是我的问题:

我正在创建一个应用程序,称“myapplication”为打击:

g++ myapplication.o  -L /dirctory_with_liba.a -L /dirctory_with_libb.a -la -lb  -o myapplication

给出以下输出:

Undefined                       first referenced
 symbol                             in file
print_msg_cpp                ./liba.a(d.o)

现在假设liba.a由以下目标文件组成:

c.o
d.o
e.o

和libb.a由以下目标文件组成:

f.o
g.o
h.o

和符号print_msg_cpp在g.o中定义,它是libray libb.a的一部分。

现在我只是无法理解为什么它给出了未定义的符号错误,即使在包含-lb之后也是如此。有什么建议吗?

以下是输出nm命令:

nm liba.a | grep print_msg_cpp
[240]   |         0|         0|NOTY |GLOB |0    |UNDEF  |print_msg_cpp


nm libb.a | grep print_msg_cpp
[11]    |       180|        36|FUNC |LOCL |0    |1      |_GLOBAL__D__Z20print_msg_cppitPciP2container_headerRSt19basic
[9]     |       216|        36|FUNC |LOCL |0    |1      |_GLOBAL__I__Z20print_msg_cppitPciP2container_headerRSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEiz
[33]    |       252|      1416|FUNC |GLOB |0    |1      |_Z20print_msg_cppitPciP20Bcontainer_headerRSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEiz

0 个答案:

没有答案