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

请问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 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)