我正在尝试使用严格的C编译简单的DLL。整个测试库的代码如下所示:
#include <stdio.h>
__declspec(dllexport) void hello(void) {
printf("Hello, World!\n");
}
该库仅是概念的简单证明,它是由CLion使用以下CMakeLists.txt使用CMake构建的:
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.
但是,Dependency Walker确实发现我正在导出符号hello
。我基于这样一个事实,当我在Dependency Walker中检查根DLL时,hello
带有入口点。它显示在Dependency Walker的两个右窗格的底部,而最顶部的窗格中没有任何内容。 Dependency Walker底部窗格中用于符号浏览的唯一项看起来像:
E | Ordinal | Hint | Function | Entry Point
-----+------------+------------+----------+------------
[C ] | 1 (0x0001) | 0 (0x0000) | hello | 0x000010C8
[C ]
是浅灰色(如果对任何人都有意义)。
我不确定导致该DLL导出的依赖项/符号错误的原因。
答案 0 :(得分:1)
事实证明,我在为错误的体系结构进行构建。我之前尝试过为x86
进行构建(我的机器使用Intel处理器)。在所有这些尝试均失败之后,我尝试使用ctypes在Python中使用此DLL。通过CDLL('lib_test.dll')
加载DLL后提供的错误ctypes更加详尽,不仅解释了不匹配的体系结构,而且还解释了我的机器期望的体系结构。就我而言,是x86-amd64
。
现在使我的DLL无法找到那些库。 DLL试图获取未安装的MSVC ++运行时库,因为它们用于完全不同的体系结构。