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
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐