一、动态链接库项目
1、创建头文件library.h文件
#ifndef TESTC_LIB_LIBRARY_H
#define TESTC_LIB_LIBRARY_H
void hello(void);
void hello2(void);
#endif //TESTC_LIB_LIBRARY_H
2、创建c文件library.c
#include "library.h"
#include <stdio.h>
void hello(void) {
printf("Hello, World!\n");
}
void hello2(void) {
printf("Hello, World2!\n");
}
3、创建CMakeLists.txt文件
cmake_minimum_required(VERSION 3.21)
project(testc_lib C)
set(CMAKE_C_STANDARD 99)
add_library(testc_lib SHARED library.c library.h)
4、执行cmake .命令构建lib库
mac系统会出现libtestc_lib.dylib文件
linux系统会出现libtestc_lib.so文件
windows系统会出现libtestc_lib.dll文件
二、test项目
1、把动态链接库项目中的头文件library.h和libtestc_lib.dylib动态链接库文件复制过来
2、创建main.c文件,添加如下代码
#include "sharedinclude/library.h"
void *handle = dlopen("../sharedlib/libtestc_lib.dylib", RTLD_NOW);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
//清除之前存在的错误
dlerror();
//函数指针
typedef void(*hello_t)();
hello_t cac_func = dlsym(handle, "hello2");
cac_func();
//关闭动态链接库
dlclose(handle);
3、添加CMakeLists.txt文件内容
cmake_minimum_required(VERSION 3.21)
project(testc C)
set(CMAKE_C_STANDARD 99)
include_directories(sharedinclude)
link_directories(sharedlib)
add_executable(testc main.c)
target_link_libraries(testc libtestc_lib.dylib)