cmake 导入so库
时间: 2023-09-01 15:02:37 浏览: 162
在CMake中导入SO库可以通过以下步骤完成:
1. 首先,在CMakeLists.txt文件中添加以下代码,定义要生成的可执行文件名称和源代码文件列表。
```cmake
# 指定要生成的可执行文件名称
SET(EXECUTABLE_NAME "myapp")
# 添加源代码文件列表
SET(SOURCE_FILES main.cpp)
# 添加可执行文件
ADD_EXECUTABLE(${EXECUTABLE_NAME} ${SOURCE_FILES})
```
2. 然后,使用`find_library`命令来查找要导入的SO库。例如,要导入名为"mylib.so"的库,可以使用以下代码:
```cmake
# 查找要导入的SO库
find_library(MYLIB_LIBRARY mylib)
# 如果找到SO库,将其添加到链接库中
IF(MYLIB_LIBRARY)
TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} ${MYLIB_LIBRARY})
ENDIF()
```
3. 最后,在源代码中使用SO库中的函数和变量。例如,假设"mylib.so"库中有一个名为"myFunction"的函数,可以通过以下代码调用它:
```cpp
#include <iostream>
#include <dlfcn.h>
int main() {
// 加载SO库
void* handle = dlopen("mylib.so", RTLD_LAZY);
if (!handle) {
std::cout << "无法加载SO库" << std::endl;
return 1;
}
// 获取函数指针并调用函数
typedef int (*myFunctionPtr)(int);
myFunctionPtr myFunc = (myFunctionPtr)dlsym(handle, "myFunction");
if (!myFunc) {
std::cout << "无法获取函数指针" << std::endl;
dlclose(handle);
return 1;
}
// 调用函数并打印结果
int result = myFunc(42);
std::cout << "调用myFunction返回值:" << result << std::endl;
// 关闭SO库
dlclose(handle);
return 0;
}
```
通过以上步骤,在CMake中成功导入SO库,并在源代码中使用其中的函数和变量。
阅读全文