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
头文件

  1. //load.h

  2. #ifndef LOAD_H
  3. #define LOAD_H

  4. #ifdef __cplusplus
  5. extern "c"
  6. {
  7. #endif

  8. int load(void);


  9. #ifndef __cplusplus
  10. }
  11. #endif //__cplusplus

  12. #endif //LOAD_H

  13. //load.cpp

  14. #include <stdio.h>

  15. int load(void)
  16. {
  17.         printf("i am load.n");
  18.         return 0;
  19. }
复制代码




保证按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