编译动态连接库的问题

小魔菇 2009-11-03 11:15:55
test.c

#include <stdio.h>
void print()
{
printf("------------------------\n");
}

gcc -c test.c
gcc -shared -o libtest.so test.o
生成了libtest.so库
然后我调用它
main.c

extern void print();
int main()
{
print();
return 0;
}

gcc -L./ -ltest -o main main.c
./main
error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

请高手指点一下 不知道哪儿错了
...全文
131 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2009-11-05
  • 打赏
  • 举报
回复
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
James__Zhan 2009-11-03
  • 打赏
  • 举报
回复
顶楼上,Mark
wen287877566 2009-11-03
  • 打赏
  • 举报
回复
不一定要指定在/lib下面。但是一般都是会放在一个叫lib的目录里面,这个目录可以自己建立,当你运行编译好的程序之前不需指定你的动态库的路径,比如:export LD_LIBRARY_PATH=$HERE/lib,这样应运行编译的bin 文件就应该没有问题了
小魔菇 2009-11-03
  • 打赏
  • 举报
回复
我已经指定路径
一定要把libtest.so弄到/lib中吗?
bison_pu 2009-11-03
  • 打赏
  • 举报
回复
要把生成的libtest.so copy到/lib后再执行./main
plumstar 2009-11-03
  • 打赏
  • 举报
回复
完全可以,参见http://hi.baidu.com/plumstar/blog/item/fce3d1296138bef498250ab0.html
小魔菇 2009-11-03
  • 打赏
  • 举报
回复
继续请教
C可以调用C++写的库吗?
小魔菇 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 winter_sui 的回复:]
引用 2 楼 eclipse_2 的回复:
我已经指定路径
一定要把libtest.so弄到/lib中吗?


你要分清,编译和运行是两回事。
编译的时候指定libtest.so只是代表着你的main.c没有语法错误,生成可执行文件。

然后运行的时候去动态加载libtest.so 所以要把libtest.so放到系统库目录里。
/etc/ldconfig?
[/Quote]
原来如此
运行的时候要得把库文件弄到系统库目录中
受教了
tomsheep 2009-11-03
  • 打赏
  • 举报
回复
mark
winter_sui 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eclipse_2 的回复:]
我已经指定路径
一定要把libtest.so弄到/lib中吗?
[/Quote]

你要分清,编译和运行是两回事。
编译的时候指定libtest.so只是代表着你的main.c没有语法错误,生成可执行文件。

然后运行的时候去动态加载libtest.so 所以要把libtest.so放到系统库目录里。
/etc/ldconfig?

23,128

社区成员

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

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