0

由于现在可以在 Flutter 中打开一个 DynamicLibrary(dylib、dll、so)。这些库是用 C 或 C++ 编写的。

我现在尝试构建一个基本的 dart 命令行应用程序,使用 编译它dart compile exe并尝试使用 将其加载到我的 Flutter 应用程序中DynamicLibrary.open(),就像使用 C/C++ 中的本机库一样。

typedef HelloWorldFunc = Void Function();
typedef HelloWorld = void Function();

...

final dynLib = DynamicLibrary.open('/path/to/cli.exe');
final HelloWorld func = dynLib.lookup<NativeFunction<HelloWorldFunc>>('hello_world').asFunction();
func();

(我已经按照本教程添加了一个名为 hello_world https://dart.dev/tutorials/server/get-started#3-create-a-small-app的空 void 函数 )

但是找不到符号:

Failed to lookup symbol 'hello_world': dlsym(0x7fec2310e5a0, hello_world): symbol not found

问题

通常是否可以在 Flutter 中打开 dart 编译的库,例如用 C++ 编写的 DLL?由于dart compile exe 也生成本机机器代码

如果是,如何?

谢谢!

4

1 回答 1

0

Dart 不能像其他语言那样创建共享库,因为它需要在嵌入器/DartVM 中运行。

这个问题有一个很好的解释:

https://github.com/dart-lang/sdk/issues/37480

于 2022-02-05T19:03:38.363 回答