在 Linux 下使用 C++ 管理动态库(动态链接库)和静态库(静态链接库)涉及多个步骤,包括编译、链接以及运行时的库管理。下面是一些基本的指导:
静态库通常以 .a 作为文件扩展名。它们是在编译时被链接到最终的可执行文件中的。
编写源代码:创建需要的 .cpp 文件。
编译源文件为对象文件:
g++ -c file1.cpp -o file1.o g++ -c file2.cpp -o file2.o  创建静态库:
ar rcs libmystatic.a file1.o file2.o  这里 libmystatic.a 是生成的静态库文件。
在编译时使用静态库:
g++ main.cpp -L/path/to/library -lmystatic -o myprogram  这里 -L 指定库的路径,-l 指定库的名字(不带 lib 前缀和 .a 后缀)。
动态库通常以 .so 作为文件扩展名。它们在运行时被加载。
编写源代码:创建需要的 .cpp 文件。
编译源文件为位置无关代码的对象文件:
g++ -fPIC -c file1.cpp -o file1.o g++ -fPIC -c file2.cpp -o file2.o  创建动态库:
g++ -shared -o libmydynamic.so file1.o file2.o  这里 libmydynamic.so 是生成的动态库文件。
在编译时使用动态库:
g++ main.cpp -L/path/to/library -lmydynamic -o myprogram  确保动态库路径在运行时可被找到。可以通过以下方式之一实现:
将库路径添加到 LD_LIBRARY_PATH 环境变量中:
export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH  使用 ldconfig 将库路径添加到系统配置中:
.conf 文件,例如 /etc/ld.so.conf.d/mylib.conf,并添加库路径。sudo ldconfig。ldd 命令查看可执行文件依赖的动态库:ldd myprogram  __attribute__((visibility("default"))) 来显式导出符号。通过这些步骤,你可以有效地在 Linux 下使用 C++ 管理静态库和动态库。