我在链接静态库时遇到一种奇怪的链接器错误,以下是我的问题:
我正在创建一个应用程序,称“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