linux gcc静态库路径,GCC 静态库和动态库

//hello.c

#include

void print_hello()

{

printf("HelloWorld ");

}

//main.c

#include

#include "hello.h"

int main()

{

print_hello();

printf("%d",HELLO);

return 0;

}

//hello.h

#define HELLO 9999

void print_hello();

其中 hello.c 和 main.c 在同一个目录下, hello.h在上一个目录。

先生成 xxx.o 文件$ gcc hello.c -c ==> hello.o$ gcc main.c -c ==> error : no hello.h$ gcc main.c -c -I ../ ==> main.o -I 指定头文件的搜索目录( I 是大小的 i)$ ls ==> hello.o main.o hello.c main.c

静态库的生成

$ ar cr libhello.a hello.o ==> libhello.a (注意顺序)

静态库的使用

$ gcc main.o -o main.out -lhello==> error : /usr/bin/ld: cannot find -lhello,意思是找不到库 -l 是小写的L

1.linux下默认gcc搜索是按照LD_LIBRARY_PATH来搜索的,标准库(动态库和静态库)都在 /usr/lib/ 下面

2.-lhello是一种约定,表示搜索 libhello.a 或者 libhello.so 的库,-lXXXX 即 libXXXX.a 或者 libXXXX.so

3. 可以用-L 来指定加载库的目录

$ gcc main.o -o main.out-L . -lhello ==>出现了main.out,成功!

静态库的测试

$ rm libhello.a -f ==>程序照样能运行,说明静态库是链接进程序的!

动态库的生成

$ gcc hello.o -o libhello.so -shared ==> libhello.so

动态库的使用

$ gcc main.o -o main.out -L . -lhello ==> -L指定库所在路径,-lhello指定libhello.a 或者 libhello.so

$ ./main.out ==> error while loading shared libraries: libhello.so: cannot open shared object file: No such file                    or directory

动态链接库是在程序运行时候去加载的,加载的时候是从标准目录/usr/lib下去寻找的,下面是三种解决方法

1. $ cp libhello.so /usr/lib/ ==> libhello.so拷贝到/usr/lib/下去

2. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

// export LD_LIBRARY_PATH=$LD_LIBRARY_PATH :

3 . /etc/ld.so.conf 里面加一行所在库的目录,然后执行 ldconfig

/etc/ld.so.conf文件:除了标准目录(/lib和/usr/lib)之外,链接器和加载器搜索共享库时要检查的其他目录,和这个文件相关的一个命令是:ldconfig

动态库的测试

$ rm libhello.so ==>运行的时候出错,说明程序运行的时候需要库!0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值