在C++开发中,C++动态库(也称为共享库)是一种非常重要的代码复用方式。它允许你将常用功能打包成一个独立的文件,在多个程序中共享使用,而无需重复编译源码。本教程将从零开始,详细讲解如何在Linux系统下创建、编译并使用C++动态库(.so文件),即使是编程小白也能轻松上手。

动态库(Dynamic Library),在Linux中通常以 .so(Shared Object)为扩展名,在Windows中则是 .dll。与静态库不同,动态库在程序运行时才被加载,多个程序可以同时使用同一个动态库文件,节省内存和磁盘空间。
常见的共享库开发场景包括:插件系统、模块化架构、跨项目功能复用等。
我们先创建一个简单的数学工具库,包含加法和乘法两个函数。
创建头文件 math_utils.h:
// math_utils.h#ifndef MATH_UTILS_H#define MATH_UTILS_H#ifdef __cplusplusextern "C" {#endif// 声明加法函数int add(int a, int b);// 声明乘法函数int multiply(int a, int b);#ifdef __cplusplus}#endif#endif // MATH_UTILS_H注意:使用
extern "C"可避免C++名称修饰(name mangling),使动态库更容易被其他语言调用。
接着创建实现文件 math_utils.cpp:
// math_utils.cpp#include "math_utils.h"int add(int a, int b) { return a + b;}int multiply(int a, int b) { return a * b;}使用g++编译器将源码编译为动态库。关键参数是 -fPIC(生成位置无关代码)和 -shared(生成共享库)。
在终端执行以下命令:
g++ -fPIC -shared -o libmath_utils.so math_utils.cpp成功后,你会在当前目录看到 libmath_utils.so 文件。这就是你的动态链接库教程中要创建的核心产物!
创建一个测试程序 main.cpp 来验证动态库是否可用:
// main.cpp#include <iostream>#include "math_utils.h"int main() { int sum = add(5, 3); int product = multiply(4, 7); std::cout << "5 + 3 = " << sum << std::endl; std::cout << "4 * 7 = " << product << std::endl; return 0;}编译测试程序时,需要链接动态库:
g++ -o main main.cpp -L. -lmath_utils解释:
-L.:告诉链接器在当前目录查找库文件-lmath_utils:链接名为 libmath_utils.so 的库(去掉前缀 lib 和后缀 .so)直接运行 ./main 可能会报错:“error while loading shared libraries: libmath_utils.so: cannot open shared object file”。
这是因为系统找不到动态库。解决方法有三种:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH/etc/ld.so.conf 并运行 sudo ldconfig/usr/local/lib执行第一种方法后,再运行程序:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH./main输出应为:
5 + 3 = 84 * 7 = 28通过本教程,你已经掌握了如何进行创建.so文件的完整流程:从编写头文件和实现文件,到编译生成动态库,再到链接和运行测试程序。这种C++动态库技术是构建大型软件系统的基础技能之一。
建议你动手实践一遍,加深理解。后续还可以学习如何使用CMake自动化构建动态库,或在Windows下使用Visual Studio创建DLL文件。
祝你编程愉快,早日成为C++高手!
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125934.html