linux c与c++库互相调用
C++可以兼容C的语法,C/C++主要的区别是编译函数符号规则不一样,C语言代码编译后的函数名还是原来函数名,C++代码编译后的函数名带有参数信息。
两种语言生成的库是无法直接互相调用的,原因在于c++支持重载,因此存在改名机制(也可能是因为有改名机制所以支持重载 ,即生成的中间文件会对函数名进行改写,会将函数名与参数列表相结合生产新的函数名,这样就可以通过不同的函数名来区分重载函数了。而C语言没有改名机制,函数名未改动,若两种语言直接调用,便会报错:函数名未定义。
C调用C++库的问题
错误描述
首先,我们来了解一下具体的错误信息:
$ gcc main.cpp -o main
/tmp/cc2BAcMf.o: In function `main':
main.cpp:(.text+0x20): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
这段代码尝试使用GCC编译一个名为main.cpp的C++文件,然后将其链接成一个名为main的可执行文件。但是,在链接阶段出现了错误,提示对__gxx_personality_v0的未定义引用。
分析
__gxx_personality_v0是GCC C++异常处理部分的一个函数。通常,当我们尝试用GCC(而非G++