Clion C/C++动态库生成与调用简单Demo win11&ubuntu

最近搞了个Eletron项目,需要用到调用动态库实现部分功能,探索了很久,记录一下。方便他人也,方便自己。OK,Talk is cheap,show code。

第一步,生成动态库文件

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第1张图片

打开Clion,New Project, 如图,左边选择C、C++Library, 选择C++Library,右边输入项目名称,library替换untitled,

选择语音版本 - Language standard, C++17,

选择库类型Library type - 选择shared动态库。shared动态的,static静态的。ps: 动态库和静态库的区别,都可以实现功能供程序调用,但是调用后的存在形式有区别,动态的不管多少程序调用,库在内存里都只有一份,静态有多少个程序调用就有多少个库在内存里,所以为了节省内存一般都用动态库。

点Create即可,等待创建和初始化完成。windows也是一样的步骤,我用的是Ubuntu。

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第2张图片

如图点build-> build 'library',生成动态库,在cmake-build-debug里有个liblibrary.so,是linux里的动态库文件,如果是windows是liblibrary.dll。到此生成成功,动态库里有一个方法hello()。

第二步,引用并使用动态库文件

再新建一个可执行的项目,New Project - C++Executable - 命名test - 选择语音版本 - Language standard, C++17 - Create

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第3张图片

创建两个文件,如图,include和lib,

把第一步生成的liblibrary.so复制到lib,和第一步Clion创建的library.h复制到include。

再在CMakelists.txt里指定引入

cmake_minimum_required(VERSION 3.15)
project(test)

set(CMAKE_CXX_STANDARD 17)

# 指定lib目录
include_directories(${PROJECT_SOURCE_DIR}/include)
# 指定头文件搜索路径
link_directories(${PROJECT_SOURCE_DIR}/lib)

add_executable(test main.cpp)

# 将库链接到项目中, Windows平台是liblibrary.dll
target_link_libraries(${PROJECT_NAME} liblibrary.so)

打开同目录下的main.cpp,引入并调用hello()方法

#include "library.h"

int main() {
    hello();
    return 0;
}

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第4张图片

成功输出Hello, world

注意:

A. 但是如果让electron调用还需要,在Clion生成的library.h头文件里处理一下导出

#原来代码

#ifndef LIBRARY2_LIBRARY_H
#define LIBRARY2_LIBRARY_H

#void hello();

#endif //LIBRARY2_LIBRARY_H


#----------------------------------------分割线------------------------------------


#修改成这样

#ifndef LIBRARY3_LIBRARY_H
#define LIBRARY3_LIBRARY_H

extern "C"
{
    __declspec(dllexport) int hello(int a, int b);
}

#endif //LIBRARY3_LIBRARY_H

1. 被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和链接的

2. __declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。

B. 请确认你当前的nodejs版本是64位还是32位,如果是32位需要导出32位的动态库,64位的导出64位动态库。由于Clion默认导出的是32位动态库,所以需要配置导出的配置。File - Settings - Build,Execution,Deployment - Toolchains添加一个MinGW64,如果没有需要下载, 下载地址,选择:Windows 64 bit Portable ZIP (including compiler),解压到C://MinGW64就好,没有目录就创建一个,Clion选择这个目录,点ok。

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第5张图片

再导出

C. 如何确定当前的动态库文件是32位还是64位的,可以下载7z压缩软件,用7z打开动态库文件,选个data,点右上角的信息,如图

Clion C/C++动态库生成与调用简单Demo win11&ubuntu_第6张图片

X86就是32位,X64是64位。不对应会报:Uncaught Error: Dynamic Linking Error: Win32 error 193这个错

你可能感兴趣的:(C/C++,Nodejs,Vue,c++,开发语言)