公司动态

linux下C++生成并使用静态库和静态库

📅 2026/8/14 6:37:43
linux下C++生成并使用静态库和静态库
为了保证以下程序能正常编译请先按照提供的操作搭建好目录结构创建一个Demo文件夹文件夹下创建一个Fun文件夹创建好后进入Fun文件目录下创建math.cpp和math.h文件。编写math.h和math.cpp内容。// math.h #include iostream using namespace std; // 定义add函数 int add(int a, int b);// math.cpp #include math.h // add函数实现 int add(int a, int b) { return (a b); }一、静态库生成和使用在Fun目录下使用g命令将上面准备好的math.cpp编译成.a文件输入命令后会在当前目录下生成一个libmath.a的文件这个文件就是静态库。g -c -o libmath.a math.cpp # -c 表示只编译不链接 # 静态库命名规范lib开头.a后缀名确定生成静态库后回到上一级目录下即Demo目录下创建demo.cpp。# demo.cpp #include Fun/math.h int main() { int a 44; int b 66; std::cout add(a, b) std::endl; return 0; }使用生成的libmath.a文件来编译demo.cpp文件。# 方法一直接指定.a文件, g -o demo demo.cpp /home/long/c/lib_so/Demo/Fun/libmath.a # 方法二使用-L参数这种是规范用法会自动找到.a文件建议用这种方式 # 注意最后一级目录不要加/否则会找不到库 g -o demo demo.cpp -L/home/long/c/lib_so/Demo/Fun -lmath方法一运行结果方法二运行结果二、动态库生成和使用注意所有生成动态库的程序使用都是静态库中的源程序不做任何修改。进入Fun目录下使用g命令动态库也就是常见的.so文件运行命令后就会生成一个libmath.so的文件。g -fPIC -shared -o libmath.so math.cpp生成.so文件后回到上一级目录Demo在当前目录下通过libmath.so文件编译demo.cpp文件。# 方法一直接指定.so文件 g -o demo demo.cpp /home/long/c/lib_so/Demo/Fun/libmath.so # 方法二规范用法 g -o demo demo.cpp -L/home/long/c/lib_so/Demo/Fun -lmath # 也可以使用相对路径 g -o demo demo.cpp -L./Fun -lmath在使用方法二时需要将.so文件加入到环境变量中这样能确保生成的程序找到对应的链接库。# 使用动态库时不能直接用需要将动态库加入环境变量LD_LIBRARY_PATH中 #查看环境变量 echo $LD_LIBRARY_PATH #加入环境变量 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/long/c/lib_so/Demo/Fun方法一的运行结果方法二的运行结果在教程中静态库和动态库的规范用法是一样的如果同时存在静态库和动态库时程序会优先使用动态库。