c++ + linux+cmake编译动态库+so调用

1. 创建动态库

// hello.cpp
#include <iostream>
#include <string>
using namespace std;
int hello(string a) {
    cout << "hello "<< a << endl;
    return 0;
}

2. 编译动态库

1、通过命令行生成动态库
使用 g++(GNU C++ 编译器)来编译代码为动态库。使用 -fPIC(Position Independent Code)选项来生成与位置无关的代码,这是创建共享库所必需的。使用 -shared 来创建共享库,并指定输出文件的名称(通常以 .so 结尾)。

g++ -fPIC -shared -o libhello.so hello.cpp

2、通过cmake编译
CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(hello VERSION 0.1)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(PROJECT_SOURCES
    hello.cpp
)
# 生成静态库文件
# add_library(${PROJECT_NAME} STATIC ${PROJECT_SOURCES})
# 生成动态库文件
add_library(${PROJECT_NAME} SHARED ${PROJECT_SOURCES})
cmake .&& make

在这里插入图片描述
生成libhello.so动态链接库文件。

3. 使用动态库

代码

// main.cpp
#include <iostream>
#include <string>
using namespace std;
int hello(string a); // 声明函数
int main() {
    hello("waysolong"); // 调用函数
    return 0;
}

4. 编译程序并链接动态库

g++ -o main main.cpp -L. -lhello

这里,-L. 选项告诉编译器在当前目录查找库,-lhello 选项告诉它链接 libhello.so(注意 lib 前缀和 .so 后缀在指定时会被省略)。
这步生成可执行文件 main

5. 运行程序

为确保程序可以找到动态链接库,有两种方法
第一:
并将libhello.so移动到/usr/lib/ 目录下

mv libhello.so /usr/lib/

第二:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

运行可执行文件

./main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值