ld
是 Linux 下的链接器,它负责将编译后的目标文件(.o 或 .obj)链接成可执行文件(.exe)或共享库(.so)
- 静态库(Static Library): 静态库在链接过程中会被直接嵌入到最终的可执行文件中。使用静态库的优势在于,可执行文件会包含所有依赖的库函数,因此不依赖于外部的库文件。但缺点是,可执行文件可能会变得很大,因为所有的库函数都被包含进去了。
使用静态库的命令格式如下:
ld -o output_file input_file(s) -lstatic_library_name -lyour_static_library_name
例如,将 libexample.a
静态库链接到名为 my_program
的可执行文件中:
ld -o my_program my_program.o -lexample -lexample
- 动态库(Dynamic Library): 动态库在链接过程中不会被嵌入到可执行文件中,而是在程序运行时被动态加载。使用动态库的优势在于,多个程序可以共享同一个动态库文件,从而节省内存空间。但缺点是,如果动态库发生更改,那么所有使用该动态库的程序都需要重新编译。
使用动态库的命令格式如下:
ld -o output_file input_file(s) -ldynamic_library_name -lyour_dynamic_library_name
例如,将 libexample.so
动态库链接到名为 my_program
的可执行文件中:
ld -o my_program my_program.o -lexample -lexample
需要注意的是,为了使用动态库,程序在编译时需要指定 -fPIC
(Position Independent Code)选项,以便生成位置无关的代码。此外,动态库通常需要放在一个特定的目录中,以便链接器能够找到它。在运行时,可以通过 LD_LIBRARY_PATH
环境变量来指定动态库的搜索路径。