cmake中使用so库


cmake_minimum_required(VERSION 2.0)

project(cmaketest)


#头文件搜索路径
include_directories("/home/user/cvcode/slambook/ch2")


#库文件搜索路径
link_directories("/home/user/cvcode/slambook/ch2/build" )


add_executable(useHell useHell.cpp )

target_link_libraries(useHell   hello_shared.so)

keypoints:

1.so相互依赖可以使用ldd命令查看依赖关系,

    ldd命令简介:https://blog.csdn.net/stpeace/article/details/47069215

 

2.父亲依赖无需重复链接。因为子so文件已经链接至文件的详细路径。

 

3.每个关键设置的使用总结:

include_directories:设置头文件目录

link_directories:设置需要链接的库文件目录

link_libraries:设置需要链接的库文件路径(完整路径)

target_link_libraries:设置需要链接的库文件名称

 

参考:https://blog.csdn.net/arackethis/article/details/43488177

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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,并在源代码使用的函数和变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值