免费注册 查看新帖 |

Chinaunix

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

两个C文件编译成一个so,调用的时候说找不到文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-04 11:56 |只看该作者 |倒序浏览
我这样把两个C文件编译成一个so
gcc -fPIC -o pub.so h.c pub.c -lcrypto -shared

  
然后查看:
nm pub.so|grep T
000010f8 T Gen
里面确实有我的导出函数
  
然后另外一个调用的C文件里
include pub.h
并调用,编译的时候
gcc  -l"pub.so" -L.   -o g g.o   
或者
gcc  -l"pub.so"  -o g g.o
gcc  -l"./pub.so" -L.   -o g g.o
或者把pub.so拷贝到/usr/lib下

提示错误:
g.c.text+0x29): undefined reference to `Gen'  
  
或者:
gcc  -o g g.o  
g.o: In function `main':
g.c.text+0x29): undefined reference to `Gen'


谁知道是怎么回事

[ 本帖最后由 ffb 于 2008-9-4 12:05 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-09-04 12:56 |只看该作者
gcc  -l"pub.so" -L.   -o g g.o
把上面的 -l"pub.so" 放到 g.o的后面试试。另外,我记得不要需要用“l”,只要
gcc -og g.o pub.so
就可以了。
-l后面的库名字应该是某个libxxx.so的xxx部分。
原帖由 ffb 于 2008-9-4 11:56 发表
我这样把两个C文件编译成一个so
gcc -fPIC -o pub.so h.c pub.c -lcrypto -shared

  
然后查看:
nm pub.so|grep T
000010f8 T Gen
里面确实有我的导出函数
  
然后另外一个调用的C文件里
include ...

[ 本帖最后由 freearth 于 2008-9-4 13:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-04 13:12 |只看该作者
改名为 libpub.so ,连接时用 -lpub 试试?

论坛徽章:
0
4 [报告]
发表于 2008-09-04 13:25 |只看该作者
谢谢楼上的两位
py@ubuntu8:~/l$ls libpub.so
libpub.so

gcc  -o g g.c -lpub -L./
这样终于可以编译了,但是执行又出错了:

py@ubuntu8:~/l$ ./g
./g: error while loading shared libraries: libpub.so: cannot open shared object file: No such file or directory

文件实际是存在的(和g在同一个目录下)

论坛徽章:
0
5 [报告]
发表于 2008-09-04 13:36 |只看该作者
设置LD_LIBRARY_PATH这个变量?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-09-04 13:44 |只看该作者
我在等 qiu00 回这个帖……

论坛徽章:
0
7 [报告]
发表于 2008-09-04 13:49 |只看该作者
原帖由 熏红猴 于 2008-9-4 13:36 发表
设置LD_LIBRARY_PATH这个变量?

恩,要设置这个,或放到/usr/local/lib/下也行

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2008-09-04 13:55 |只看该作者
原帖由 emacsnw 于 2008-9-4 13:12 发表
改名为 libpub.so ,连接时用 -lpub 试试?


对,使用-l的使用,库文件的命名是有要求的。

要么就不适用-l,直接指定库所在的路径即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP