免费注册 查看新帖 |

Chinaunix

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

[其他] 动态库 Segmentation fault [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-18 23:43 |只看该作者 |倒序浏览
本帖最后由 shihyu 于 2016-05-19 09:46 编辑
  1. int add(int a, int b)
  2. {
  3.     return a + b;
  4. }
复制代码
  1. int sub(int a, int b)
  2. {
  3.     return a - b;
  4. }
复制代码
  1. #include <stdio.h>

  2. int a = 100;
  3. int b = 200;

  4. int main(int argc, char *argv[])
  5. {
  6.     printf("add=%d\n",add(a,b));
  7.     return 0;
  8. }
复制代码
  1. CC = gcc
  2. SOFLAGS = -shared
  3. LDFLAGS = -lm
  4. CFLAGS = -Wall -pedantic -ggdb3 -O0 -std=c99 -lpthread -fPIC -shared

  5. ADD_OBJS = add.o

  6. SUB_OBJS = sub.o

  7. all: add.so sub.so
  8.         ${CC}  -o main  main.c -L -ladd -L -lsub ${CFLAGS} ${LDFLAGS}

  9. add.so: ${ADD_OBJS}
  10.         $(CC) ${SOFLAGS} -o $@ $?

  11. sub.so: ${SUB_OBJS}
  12.         $(CC) ${SOFLAGS} -o $@ $?

  13. .PHONY: clean
  14. clean:
  15.         rm -f main ${ADD_OBJS} ${SUB_OBJS}

复制代码
./main
Segmentation fault (core dumped)

请问一下这Makefile 编译出来的执行文件为什么会 Segmentation fault?

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
2 [报告]
发表于 2016-05-19 08:25 |只看该作者
这个问题。。。撸主,这个跟 makefile 有关系的可能不大。除非你引用外部库的版本变了。。。。当然,库比较傻逼的时候会有这种问题。


所以,上代码。


就这俩接口,谁要是能看出来断错误的原因,那就厉害了。

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
3 [报告]
发表于 2016-05-19 09:39 |只看该作者
哎呀卧槽,发帖回复还能被删除?

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
4 [报告]
发表于 2016-05-19 09:41 |只看该作者
把CFLAGS中的选项-fPIC -shared移到SOFLAGS中试试(删去原SOFLAGS中的-shared)

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
5 [报告]
发表于 2016-05-19 09:49 |只看该作者
本帖最后由 shihyu 于 2016-05-19 09:50 编辑
爻易 发表于 2016-05-19 09:41
把CFLAGS中的选项-fPIC -shared移到SOFLAGS中试试(删去原SOFLAGS中的-shared)



删去原SOFLAGS中的-shared
  1. gcc -Wall -pedantic -ggdb3 -O0 -std=c99 -lpthread -fPIC -shared   -c -o add.o add.c
  2. gcc  -o add.so add.o
  3. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
  4. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
  5. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
  6. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
  7. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
  8. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
  9. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
  10. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
  11. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
  12. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
  13. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
  14. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
  15. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
  16. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
  17. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
  18. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
  19. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
  20. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
  21. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
  22. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
  23. /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
  24. /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start':
  25. (.text+0x20): 未定義參考到「main」
  26. collect2: error: ld returned 1 exit status
  27. make: *** [add.so] Error 1
复制代码

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
6 [报告]
发表于 2016-05-19 09:52 |只看该作者
本帖最后由 VIP_fuck 于 2016-05-19 09:52 编辑

要不先不用 makefile,用一个 gcc 命令去做,然后再排查是 makefile 问题还是别的问题。这么排查东西多,比较费时吧。


恩,,没有看到底写的是啥,纯粹凭感觉。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
7 [报告]
发表于 2016-05-19 10:00 |只看该作者
靠,没注意你居然编译动态库用缺省规则

SOFLAGS再加上-c选项

删去ADD_OBJS = add.o 与SUB_OBJS = sub.o

add.so: ${ADD_OBJS}替换成 add.so: add.c
sub.so: ${SUB_OBJS}替换成 sub.so: sub.c

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
8 [报告]
发表于 2016-05-19 10:10 |只看该作者
这个makefile是谁写(抄)的,直接拉出去打死

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
9 [报告]
发表于 2016-05-19 11:24 |只看该作者
爻易 发表于 2016-05-19 10:00
靠,没注意你居然编译动态库用缺省规则

SOFLAGS再加上-c选项


-c不用加了,SOFLAGS最后就是-shared -fPIC

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
10 [报告]
发表于 2016-05-19 11:25 |只看该作者
shihyu 发表于 2016-05-19 09:49
删去原SOFLAGS中的-shared


不光是删,还有移呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP