我在c ++中编写了一些代码(静态库),(我认为是这样,C兼容性 - 得到'extern C'等等),然后我想在我的C应用程序中使用它。
当我运行我的C应用程序时,我收到错误:
undefined symbol: _ZTISt9exception
c ++代码是使用gcc编译的:-std=c++0x -lstdc++
标志
然后,在obj文件上运行ar
我想这个符号直接来自c ++库。当我编译我的C应用程序时,我当然在我的makefile中添加了我的C ++库,并且编译完成没有错误。
可能出现什么问题?
thx for all help
答案 0 :(得分:1)
您需要将最终的可执行文件与C ++运行时库(-lstdc++
)链接起来;它在编译C ++对象时没有任何作用,只链接可执行文件。
答案 1 :(得分:1)
静态库未链接,它只是存档中的目标文件集合。所有文件名如libxxx.a
都是静态库,而名为libyyy.so
的文件是动态库。
这意味着在您链接它以生成可执行文件之前,库中的外部符号永远不会被解析。然后,您还需要库所需的所有库文件。