应用程序用两种方式与外部函数链接:
1.在构建时与静态库(lib.a)静态地链接,并且将库代码包含在应用程序的可执行文件里。 2.在运行时与共享库(lib.so)动态地链接,通过动态链接接入器,将动态库映射进应用程序的可执行内存中。 在启动应用程序之前,动态链接装入器将所需的共享目标库映射到应用程序的内存。 静态函数库:实际上就是普通的目标文件的集合,一般以.a为后缀 例如有文件 file1.c file2.c file3.c file.h
gcc -c file1.c file2.c file3.c 对文件编译生成file1.0 file2.0 file3.0 目标文件 ar -rc libfile.a file1.o file2.o file3.o 将目标文件打包成libfile.a库文件 如果文件main.c 需要使用到libfile.a gcc -c -I xxxx main.c 编译生成对应的目标文件 -I是指定对应的头文件的路径 gcc -o main -Lxxx main.o libfile.a 生成可执行文件 -L指定对应的库文件的路径 共享库(动态链接库)的生成:
gcc -fpic -shared -o libfile.so file1 file2 file3 -fpic 使输出的对象模块是按照可重定位地址方式生成 -shared 指定把对应的源文件生成对应的动态链接库文件libfile.so文件 调用分为隐式和显式
1.隐式 gcc -c -Ixxx main.c gcc -o main -Lxxx main.o libfile.so 2.显式 在main.c文件中调用dlopen() dlsym()等函数 gcc -o mian ldl main.c |
|
来自: audrey_guowei > 《Linux》