1.所需的文件:main.c main.h test.c test.h
将这几个文件编译成动态库:libtest.so
gcc test.c -fPIC -shared -o libtest.so
编译完成后会在当前目录下生产libtest.so这个文件
将main.c与动态库libtest.c链接生成可执行文件main:
gcc test.c -L./ -ltest -o main
执行ldd main 可以查看如何调用动态库中的函数
2.编译参数解析:
-shared:表示生成动态链接库,不使用该标志外部程序无法链接,相当一个可执行文件
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
-L:制定所要链接的库所在的目录(-L后面紧跟路径)
-ltest:编译器查找动态连接库时的命名规则,即在给出test名字前面加上lib,后面加上.so来确定库的名称
LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。
或者将libtest.so拷贝到/lib目录下
网友评论