ffi-napi 无法加载 .dll - 在 Mac 操作系统上运行

问题描述 投票:0回答:1

我正在尝试按照官方文档这里,在简单的js文件中加载.dll。

如果我从官方文档中尝试,它会起作用

var ffi = require('ffi-napi');

var libm = ffi.Library('libm', {
  'ceil': [ 'double', [ 'double' ] ]
});
libm.ceil(1.5); // 2

// You can also access just functions in the current process by passing a null
var current = ffi.Library(null, {
  'atoi': [ 'int', [ 'string' ] ]
});
console.log(current.atoi('1234')); // 1234

但是如果我尝试加载与 dll.js 文件位于同一文件夹中的提供的 .dll - 代码如下所示

const ffi = require('ffi-napi');
const path = require('path');

const file = path.join(__dirname, '/testLibrary');

const pos = ffi.Library(file, {
  testFunction: ['void', ['int']],
});

我收到此错误:

MacBook-Pro-3:serialPortTest martin$ node dll.js 
/Users/martin/Projects/serialPortTest/node_modules/ffi-napi/lib/dynamic_library.js:75
    throw new Error('Dynamic Linking Error: ' + err);
    ^

Error: Dynamic Linking Error: dlopen(/Users/martin/Projects/serialPortTest/testLibrary.dylib, 0x0002): tried: '/Users/martin/Projects/serialPortTest/testLibrary.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/martin/Projects/serialPortTest/testLibrary.dylib' (no such file), '/Users/martin/Projects/serialPortTest/testLibrary.dylib' (no such file)
    at new DynamicLibrary (/Users/martin/Projects/serialPortTest/node_modules/ffi-napi/lib/dynamic_library.js:75:11)
    at Object.Library (/Users/martin/Projects/serialPortTest/node_modules/ffi-napi/lib/library.js:47:10)
    at Object.<anonymous> (/Users/martin/Projects/serialPortTest/dll.js:6:17)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:86:12)
    at node:internal/main/run_main_module:23:47

Node.js v18.18.2

我对自动添加的 .dylib 扩展名感到困惑。

我尝试添加 .dll 扩展名,但随后在日志中我可以看到

/Users/martin/Projects/serialPortTest/testLibrary.dll.dylib

我尽我所能用stackoverflow/google 搜索它,但没有任何帮助。

如有任何帮助,我们将不胜感激。

node.js dllimport dylib
1个回答
0
投票

简而言之:您无法在 macOS 上加载 Windows DLL,原因有多种,包括但不限于:DLL 可能依赖的 Windows 特定内容、二进制文件格式(Mach-O 与 PE)、CPU DLL 的编译架构(特别是如果您使用的是 Apple Silicon)。

如果您需要针对特定于 Windows 的 DLL 开发解决方案,则需要使用 Windows – 无论是否虚拟化。

© www.soinside.com 2019 - 2024. All rights reserved.