免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2281 | 回复: 5
打印 上一主题 下一主题

问一个g++编译动态库的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-16 14:02 |只看该作者 |倒序浏览
#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++该如何编译?

论坛徽章:
0
2 [报告]
发表于 2005-11-16 14:10 |只看该作者
补充一下,gcc版本是gcc version 2.95.3
操作系统是linux 2.4.18

论坛徽章:
0
3 [报告]
发表于 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语言方式进行函数的名字生成

论坛徽章:
0
4 [报告]
发表于 2005-11-16 14:20 |只看该作者
这么说是不是意味着cpp程序默认的就是编译成load_Fv?

论坛徽章:
0
5 [报告]
发表于 2005-11-16 14:40 |只看该作者
谢谢,问题已解决^_^

论坛徽章:
0
6 [报告]
发表于 2005-11-16 14:40 |只看该作者
对于c++函数名,各种编译器虽然都是按照调用约定+函数名+形参类型列表进行名字生成的,但不同的编译器会产生不同的c++函数名。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP