【C语言】三、动态链接库生成与调用

动态链接库生成

我的主机环境如下:

  • 操作系统:Windows 10
  • IDE:Clion
  • 编译器:MinGW

以下是整个生成链接库的步骤:

  • 1.新建工程,选择新建C Library,类型选择shared
    在这里插入图片描述

  • 2.编写一个计算圆面积和计算圆周长的函数

#include "library.h"

#include <stdio.h>

#define PI 3.1415926

double GetCircleArea(float r){
    return PI * r * r;
}

double GetCircleLength(float r){
    return PI * r * 2;
}

3.编译成dll文件
在这里插入图片描述

  • 4.在cmake-build-debug目录下就会生成一个可供调用的dll动态链接库文件

动态链接库的调用

下面是调用刚刚生成的动态链接库文件的代码:

#include <stdio.h>
#include<Windows.h>

int main() {
    HMODULE h = NULL;//创建一个句柄h
    h = LoadLibrary("libtestdll.dll");
    if (h == NULL)//检测是否加载dll成功
    {
        printf("加载libtestdll.dll动态库失败\n");
        return -1;
    }
    typedef double (*GetArea)(float); // 定义函数指针类型
    typedef double (*GetLength)(float); // 定义函数指针类型
    GetArea getArea;
    GetArea getLength;
    getArea = (GetArea) GetProcAddress(h,"GetCircleArea");
    getLength = (GetLength) GetProcAddress(h,"GetCircleLength");
    float r;
    printf("请输入圆的半径:\n");
    scanf("%f",&r);
    printf("圆面积为:%f\n",getArea(r));
    printf("圆周长为:%f\n",getLength(r));

    return 0;
}

注意:libtest.dll文件我是放在执行目录下的,所以写的文件路径其实是相对路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置C语言动态链接库,你需要按照以下步骤进行操作: 1. 编写C代码:首先,你需要编写包含你的功能实现的C代码。确保你的代码正确编写并实现了你想要的功能。 2. 编译C代码为动态链接库:使用适用于你的操作系统的C编译器(如gcc或clang),将C代码编译为动态链接库。在编译时,确保将适当的标记和选项添加到编译命令中,以生成动态链接库文件。例如,对于gcc编译器,可以使用以下命令: ``` gcc -shared -o libYourLibrary.so YourCode.c ``` 这将生成名为libYourLibrary.so的动态链接库文件。 3. 将动态链接库放置在正确的位置:将生成动态链接库文件放置在Java运行时环境(JRE)可以找到的位置。一种常见的做法是将动态链接库文件放置在JDK的bin目录下。例如,对于Windows系统,可以将动态链接库文件放置在JDK安装目录的bin文件夹下。 4. 在Java代码中加载动态链接库:在Java代码中使用`System.loadLibrary("YourLibrary")`命令加载动态链接库。确保提供正确的动态链接库名称,与你在第2步中生成的库文件名称相匹配。 5. 声明和调用C函数:在Java代码中声明和调用你在C代码中定义的函数。确保使用正确的方法签名和参数类型来与C函数进行交互。 6. 编译和运行Java代码:使用Java编译器将Java代码编译为字节码,并运行生成的字节码文件。 请注意,上述步骤仅适用于在本地平台上配置和使用C语言动态链接库。如果你要在不同的操作系统或架构下使用动态链接库,可能需要进行特定的配置和调整。此外,确保遵循适用于你的平台的安全和最佳实践准则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值