在 Linux 下用 C++ 使用动态库(.so),一般分为 三步:
编译生成动态库 → 编译可执行文件并链接动态库 → 运行时让系统找到动态库
下面用最清晰、最常用的方式来说明。
mylib.cpp#include <iostream>
void hello() {
std::cout << "Hello from dynamic library!" << std::endl;
}
mylib.h#ifndef MYLIB_H
#define MYLIB_H
void hello();
#endif
main.cpp#include "mylib.h"
int main() {
hello();
return 0;
}
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
export LD_LIBRARY_PATH=.
./main
sudo cp libmylib.so /usr/lib/
sudo ldconfig
./main
g++ main.cpp -L. -lmylib -Wl,-rpath=. -o main
./main
ldd main
输出示例:
libmylib.so => ./libmylib.so
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 / 具体项目结构,我可以给你更定制的配置方式。