一、CMake3.29入门之五——动态链接库使用(显式调用和隐式调用)
- 显式调用无需头文件Calculate.h,隐式调用需要
- 详见
二、准备
mkdir v2SharedUser // 项目文件夹
mkdir build // 生成文件夹
mkdir include // 头文件文件夹
mkdir Dll // 动态库文件夹
touch main.cpp // main文件
touch CMakeLists.txt // CMake配置文件
int Add(int iA, int iB);
#include <iostream>
#include <dlfcn.h>
#include "Calculate.h"
typedef int (*Sub)(int iA, int iB);
int main()
{
std::cout << Add(1, 3) << std::endl;
void* hDll = dlopen("/home/z1069707/vsc_workspace/Dll/libcalc.so", RTLD_LAZY);
Sub sub = (Sub)dlsym(hDll, "Sub");
std::cout << sub(25, 10) << std::endl;
}
cmake_minimum_required(VERSION 3.29)
project(v2SharedUser)
set(CMAKE_CXX_STANDARD 11)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/Dll)
add_executable(main main.cpp)
target_link_libraries(main calc)
二、编译构建运行
v2SharedUser目录tree如下
- build
- Dll
- libcalc.so
- include
- Calculate.h
main.cpp
CMakeLists.txt
cd build
cmake ../
make
./main.out