① 什么是SO文件
SO文件,也称为Linux下的动态链接库,是编译好的代码和数据集合,用于供其他程序调用。它们类似于Windows中的.dll文件,主要由C或C++编译而成,与Java的字节码形式不同。在Linux系统中,SO文件并非可以直接执行,而是作为共享库存在,用于支持其他程序的功能实现。
要使用SO文件,首先需要进行动态库的编译。例如,假设有一个包含头文件so_test.h和三个源文件test_a.c、test_b.c、test_c.c的项目,通过命令gcc test_a.c test_b.c test_c.c -fPIC -shared -o ***.so进行编译。标志-fPIC确保库文件可以被动态链接,-shared标记生成的是共享库。而若要外部程序能够连接到这个库,这个标志是必不可少的。
链接阶段,当你有一个程序源文件test.c,并且要将其与编译好的SO库***.so一起生成可执行文件test时,可以使用命令gcc test.c -L. -ltest -o test。通过-ltest参数告诉编译器链接哪个库,-L.表示当前目录作为库搜索路径。运行ldd test命令,可以看到程序如何调用SO库中的函数,从而展示了库在实际执行中的作用。