Chinaunix
标题:
问一个g++编译动态库的问题
[打印本页]
作者:
lifeixiao
时间:
2005-11-16 14:02
标题:
问一个g++编译动态库的问题
#include <stdio.h>
int load(void)
{
printf("i am load.n");
return 0;
}
源文件如上,名为test.c,用g++ -shared -o a.so test.c编译,可通过,但是用nm -D a.so查看发现没有load,而是有一个叫load_Fv的symbol,估计是在load的函数名后边加上了symbol类型和参数类型.而将编译脚本中的g++换成gcc就没有问题,可以找到load的symbol,请问这是怎么回事?为什么用g++编译就不行呢?如果必须要用g++该如何编译?
作者:
lifeixiao
时间:
2005-11-16 14:10
补充一下,gcc版本是gcc version 2.95.3
操作系统是linux 2.4.18
作者:
renstone921
时间:
2005-11-16 14:14
头文件
//load.h
#ifndef LOAD_H
#define LOAD_H
#ifdef __cplusplus
extern "c"
{
#endif
int load(void);
#ifndef __cplusplus
}
#endif //__cplusplus
#endif //LOAD_H
//load.cpp
#include <stdio.h>
int load(void)
{
printf("i am load.n");
return 0;
}
复制代码
保证按c语言方式进行函数的名字生成
作者:
lifeixiao
时间:
2005-11-16 14:20
这么说是不是意味着cpp程序默认的就是编译成load_Fv?
作者:
lifeixiao
时间:
2005-11-16 14:40
谢谢,问题已解决^_^
作者:
renstone921
时间:
2005-11-16 14:40
对于c++函数名,各种编译器虽然都是按照调用约定+函数名+形参类型列表进行名字生成的,但不同的编译器会产生不同的c++函数名。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2