温馨提示×

linux c++配置怎么配动态库

小樊
33
2026-10-13 22:06:14
栏目: 编程语言

在 Linux 下用 C++ 使用动态库(.so),一般分为 三步:
编译生成动态库 → 编译可执行文件并链接动态库 → 运行时让系统找到动态库

下面用最清晰、最常用的方式来说明。


一、准备示例文件

1️⃣ 动态库源码 mylib.cpp

#include <iostream>

void hello() {
    std::cout << "Hello from dynamic library!" << std::endl;
}

2️⃣ 头文件 mylib.h

#ifndef MYLIB_H
#define MYLIB_H

void hello();

#endif

3️⃣ 主程序 main.cpp

#include "mylib.h"

int main() {
    hello();
    return 0;
}

二、编译生成动态库(.so)

g++ -fPIC -shared mylib.cpp -o libmylib.so

✅ 参数说明:

  • -fPIC:生成位置无关代码(必须)
  • -shared:生成动态库
  • libxxx.so:库名必须以 lib 开头

生成文件:

libmylib.so

三、编译可执行程序并链接动态库

g++ main.cpp -L. -lmylib -o main

✅ 参数说明:

  • -L.:告诉编译器在当前目录找库
  • -lmylib:链接 libmylib.so

四、运行程序(关键)

直接运行可能会报错:

./main

❌ 错误示例:

error while loading shared libraries: libmylib.so: cannot open shared object file

✅ 解决方法(三选一)


✅ 方法 1:临时设置(推荐调试用)

export LD_LIBRARY_PATH=.
./main

✅ 方法 2:放到系统库目录(正式部署)

sudo cp libmylib.so /usr/lib/
sudo ldconfig
./main

✅ 方法 3:编译时指定运行路径(推荐)

g++ main.cpp -L. -lmylib -Wl,-rpath=. -o main
./main

五、查看依赖关系

ldd main

输出示例:

libmylib.so => ./libmylib.so

六、CMake 配置(进阶)

cmake_minimum_required(VERSION 3.10)
project(demo)

add_library(mylib SHARED mylib.cpp)
add_executable(main main.cpp)
target_link_libraries(main mylib)

七、常见坑总结

❌ 库名不是 libxxx.so
❌ 忘记 -fPIC
❌ 运行时找不到 .so
❌ 头文件路径不对


如果你用的是 VSCode / CLion / 具体项目结构,我可以给你更定制的配置方式。

0 踩