gpt4 book ai didi

使用C编译DLL

转载 作者:行者123 更新时间:2023-11-30 14:46:05 24 4
gpt4 key购买 nike

我正在尝试严格使用 C 编译一个简单的 DLL。整个测试库的代码如下所示:

#include <stdio.h>

__declspec(dllexport) void hello(void) {
printf("Hello, World!\n");
}

该库旨在作为一个简单的概念证明,它是使用 CLion 提供的 CMake 和以下 CMakeLists.txt 构建的:

cmake_minimum_required(VERSION 3.12)
project(test_lib C)

set(CMAKE_C_STANDARD 99)

add_library(test_lib SHARED library.c)

DLL 已构建,因此我尝试使用 node-ffi 对其进行测试。并得到错误:动态链接错误:Win32错误126。从node-ffi退后一步,我将新创建的DLL放入显然一致推荐的DLL调试工具中:Dependency Walker 。我构建的 DLL 似乎有错误。具体来说:

Error: At least one required implicit or forwarded dependency was not found.
Warning: At least one delay-load dependency module was not found.

但是 Dependency Walker 确实发现我正在导出符号 hello。我这样做的依据是,当我在 Dependency Walker 中检查根 DLL 时,hello 已列出并带有入口点。它显示在 Dependency Walker 的两个右 Pane 的底部,而最顶部的 Pane 中没有任何内容。 Dependency Walker 底部 Pane 中用于符号探索的唯一项目如下所示:

E    | Ordinal    | Hint       | Function | Entry Point
-----+------------+------------+----------+------------
[C ] | 1 (0x0001) | 0 (0x0000) | hello | 0x000010C8

其中 [C ] 是浅灰色(如果这对任何人都意味着什么)。

我不确定我缺少什么导致此 DLL 具有错误的导出依赖项/符号。

最佳答案

事实证明,我正在构建错误的架构。我之前尝试过为 x86 构建(我的机器使用 Intel 处理器)。在所有这些尝试都失败之后,我尝试在 Python 中使用此 DLL ctypes 。通过 CDLL('lib_test.dll') 加载 DLL 后提供的错误 ctypes 更加详细,不仅解释了不匹配的体系结构,还解释了我的机器所期望的体系结构。就我而言,它是 x86-amd64

现在我的 DLL 找不到这些库了。 DLL 试图获取未安装的 MSVC++ 运行时库,因为它们适用于完全不同的体系结构。

关于使用C编译DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com