步骤如下:
- 1. 创建动态库
- 2. 编译动态库
- 3. 使用动态库
- 4. 编译程序并链接动态库
- 5. 运行程序
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