alpha49 2023-03-19 10:31 采纳率: 61.1%
浏览 72
已结题

请问Cmake怎样调用dll库?

今天我在研究cmake如何使用动态链接库dll的时候遇到了如下问题:
我先编译了一个dll文件,文件源码如下:
#include "stdio.h"

__declspec(dllexport) void hello(){
    printf("hello");
}
文件名设为a.dll
然后我又创建了一个可执行程序,其中cmake文件配置如下:
cmake_minimum_required(VERSION 3.24)
project(t1 C)

set(CMAKE_C_STANDARD 23)

link_directories (${PROJECT_SOURCE_DIR}/dll)
add_executable(t1 main.c)

target_link_libraries(${PROJECT_NAME} a.dll)
源文件内容如下:
extern void hello();

int main(){
    hello();
    return 0;
}
编译的时候没有报错,但是运行的时候却出现了错误:

img


进程已结束,退出代码-1073741515 (0xC0000135)

请问这是什么问题,为什么使用a.dll的时候会出现错误?怎样才能使用a.dll中的函数?求解答
  • 写回答

5条回答 默认 最新

  • weixin_52523720 2023-03-19 15:30
    关注

    确保a.dll文件位于正确的路径
    您使用了指令将dll文件的路径添加到链接目录中,但是您并没有指定dll文件的完整路径。在指令中,您应该指定dll文件的完整路径,例如:link_directories()target_link_libraries()

    target_link_libraries(${PROJECT_NAME} ${PROJECT_SOURCE_DIR}/dll/a.dll)
    请将替换为实际的dll文件路径。${PROJECT_SOURCE_DIR}/dll/a.dll

    确保您的系统已安装dll文件所需的运行时库
    您的a.dll文件可能需要一些运行时库才能正常工作,这些库可能没有安装在您的系统中。您可以尝试在命令行中运行以下命令来检查系统中是否缺少某些库:

    dumpbin /dependents a.dll
    如果输出中包含任何缺少的库,则需要将它们安装在系统中。具体的安装方式取决于您的操作系统和缺少的库。

    确保编译a.dll时使用了正确的编译选项
    您编译a.dll时应该使用选项,这将生成一个导出符号表,用于链接到可执行文件中。您可以在Visual Studio中将此选项设置为“生成DLL”属性中的“是”来实现,或者在命令行中使用以下命令:/DLL

    cl /LD a.c
    请将替换为您的dll源文件名。丶a.c丶

    希望这些步骤可以帮助您解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 赞助了问题酬金15元 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行