c++调用so(c++调用Spring boot)
## C++ 调用 SO(共享对象)### 简介共享对象(SO),也称动态链接库,是一种在多个程序中共享代码和数据的机制。在 C++ 中调用 SO 可以帮助程序模块化、可重用性更高,并且可以延迟加载,从而减小程序的启动时间。### 步骤#### 1. 编译 SO```cpp
// so_module.cpp
int add(int a, int b) {return a + b;
}// 编译成 so 库
g++ -shared -o libso_module.so so_module.cpp
```#### 2. 在 C++ 程序中加载 SO使用 `dlopen()` 函数加载 SO:```cpp
#include
handle = dlopen("./libso_module.so", RTLD_LAZY);if (!handle) {std::cerr << "Error loading so: " << dlerror() << std::endl;return -1;}// 获取函数指针int (
add_func)(int, int) = (int (
)(int, int))dlsym(handle, "add");if (!add_func) {std::cerr << "Error getting function pointer: " << dlerror() << std::endl;dlclose(handle);return -1;}// 调用函数int result = add_func(1, 2);std::cout << "Result: " << result << std::endl;// 关闭 so 库dlclose(handle);return 0; } ```### 注意
`RTLD_LAZY` 标志指示延迟加载依赖项,只有在首次调用函数时才会加载。
`dlopen()` 返回一个 opaque 句柄,用于标识 SO 库。
`dlsym()` 函数获取指定函数的指针。
在关闭 SO 库之前,调用 `dlclose()`。
调用 `dlerror()` 获取错误消息。