使用 C 编译 DLL



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

#include <stdio.h>
__declspec(dllexport) void hello(void) {
printf("Hello, World!n");
}

该库旨在作为一个简单的概念证明,它是使用 CMake 构建的,由 CLion 提供,具有以下 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 对其进行测试并得到Error: Dynamic Linking Error: Win32 error 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.

然而,依赖沃克确实发现我正在导出符号hello。我基于这样一个事实,即当我检查依赖关系查看器中的根 DLL 时,hello会列出一个入口点。它显示在依赖关系 Walker 中两个右窗格的底部,最上面的窗格中没有任何内容。Dependency Walker 底部窗格中用于符号探索的唯一项如下所示:

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

其中[C ]是灰色(如果这对任何人都有意义(。

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

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

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

最新更新