标签:占用 load strong 复制 har while 推荐 -shared 加载
编译(链接)时把静态库中相关代码复制到可执行文件中
优点:
缺点:
Demo:
hello.c
#include <stdio.h> void hello(void) { puts("Hello World"); return; }
编译生成目标文件
$ gcc -c hello.c
$ ar crs libdemo.a hell.o
$nm libdemo.a
>>
libhello.a(main.o):
0000000000000000 T _hello
U _puts
Demo:
test.c
// 声明函数原型 void hello(void); int main(int argc, char *argv[]) { // 调用函数 hello(); return 0; }
$ gcc -o test test.c -L . -l hello
编译(链接)时仅记录用到那个共享库中的哪个符号,不复制共享库中相关代码
优点:
缺点:
Demo:
hello.c
#include <stdio.h> void hello(void) { puts("Hello World\n"); return; }
bye.c
#include <stdio.h> void hello(void) { puts("bye\n"); return; }
编译生成目标文件
$ gcc -c -fPIC hello.c bye.c
创建共享库(库文件名要求 以lib开始 以.a结束 中间的部分叫库名 、.x表示数字 一般用于区分版本)
$ gcc -shared -o libdeme.so.x hello.o bye.o
为共享库创建符号链接(库文件名要求 以lib开始 以.a结束 中间的部分叫库名、后面跟的符号链接不能加.x后缀)
$ ln -s libdemo.so.1 libdemo.so
创建动态库头文件 (可以不做 在调用前声明也可以)
void hello(){}; void bye(){};
使用动态库
test.c
#include "demo.h" void bye(void) { hello(); bye(); return; }
编译
$ gcc-o test test.c -L . -l demo
执行出错
error while loading shared libraries ....No such file or directory
添加共享库的加载路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
$ vim /etc/ld.so.conf/demo.conf
/path
$ ldconfig
标签:占用 load strong 复制 har while 推荐 -shared 加载
原文地址:https://www.cnblogs.com/binHome/p/12842931.html