如何使编译程序时连接另外的库而不是系统标准的C库

msenb 2005-09-26 07:00:37
我重新编译了一个C库libc.so放在/root 目录下,
然后写了一个程序test.c 用来测试新库,想编译test.c的时候用的是新库libc.so而不是系统C库.

用命令 gcc test.c -L /root -lc -o test 会报错:

/usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/../../../crt1.o(.text+0x42): In function `_start':
: undefined reference to `__libc_csu_init'
/usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/../../../crt1.o(.text+0x52): In function `_start':
: undefined reference to `__libc_csu_fini'
collect2: ld returned 1 exit status

而用命令 gcc test.c -L /root -l libc.so -o test 则报 :

/usr/bin/ld: cannot find -llibc.so
collect2: ld returned 1 exit status

一直编译不过去,我看gcc手册里也就这几个参数是和库文件相关了
...全文
271 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyy790601 2005-09-28
  • 打赏
  • 举报
回复
学习。
踏岸寻柳 2005-09-28
  • 打赏
  • 举报
回复
有两个问题:
1. 编译的时候需要告诉编译器去哪儿找你的C库文件,需要用-L参数指定你的新的C库所在的目录;
2. 程序执行的时候也是要找C库的,需要更改SHELL的环境变量LD_LIBARAY_PATH,否则程序实际执行时用的C库可能还是系统自带的。
hundlom 2005-09-27
  • 打赏
  • 举报
回复
在.bash_profile中的LD_LIBARAY_PATH后增加你的动态库的路径,并且编译程序的时候用-l把库名加上.
诗魂鹤影 2005-09-27
  • 打赏
  • 举报
回复
库和源程序不在同一目录下 库前加个绝对路径
诗魂鹤影 2005-09-27
  • 打赏
  • 举报
回复
gcc test.c -L /root -l_libc -o test 试试
库的前缀和后缀都不要 把库改一下名字 ^_^
nicelcp 2005-09-27
  • 打赏
  • 举报
回复
说不定所指向的可能是一个软链接,看看/lib下
ls -l libc*

如果是软链接,让它链向你的库试试
bugebear3 2005-09-26
  • 打赏
  • 举报
回复
好象libc.so是与系统相关的名字吧,换个名字试试.

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧