将静态c ++库链接到c库

时间:2011-11-09 11:52:33

标签: c++ static-libraries

我在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

2 个答案:

答案 0 :(得分:1)

您需要将最终的可执行文件与C ++运行时库(-lstdc++)链接起来;它在编译C ++对象时没有任何作用,只链接可执行文件。

答案 1 :(得分:1)

静态库未链接,它只是存档中的目标文件集合。所有文件名如libxxx.a都是静态库,而名为libyyy.so的文件是动态库。

这意味着在您链接它以生成可执行文件之前,库中的外部符号永远不会被解析。然后,您还需要库所需的所有库文件。