cmake导入so库_Linux 下cmake生成SO库的使用实例-Go语言中文社区

本文介绍了如何在Linux环境下使用CMake构建共享库(SO库),包括创建共享库MySharedLib的步骤,以及如何在另一个可执行项目test中链接并使用该库。CMakeLists.txt文件配置了编译选项、头文件和库文件路径,并通过link_libraries和target_link_libraries指令进行链接。在main.cpp中调用了库中的hello()函数和模板函数sum(),通过编译和运行test程序验证了库的正确使用。
摘要由CSDN通过智能技术生成

1、创建我的共享库:MySharedLib

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(MySharedLib)

# C++11 编译

set(CMAKE_CXX_STANDARD 11)

#创建共享库

add_library(MySharedLib SHARED library.cpp library.h)

library.h

#ifndef MYSHAREDLIB_LIBRARY_H

#define MYSHAREDLIB_LIBRARY_H

// 打印 Hello World!

void hello();

// 使用可变模版参数求和

template

T sum(T t)

{

return t;

}

template

T sum(T first, Types ... rest)

{

return first + sum(rest...);

}

#endif

library.cpp

#include

#include "library.h"

void hello() {

std::cout << "Hello, World!" << std::endl;

}

在CMakeLists.txt所在的目录中:

cmake  ./

make

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、付费专栏及课程。

余额充值