在 Flutter 中使用已编译的 dart 可执行文件作为 DynamicLibrary

Use a compiled dart executable as DynamicLibrary in Flutter

很久以前就可以在 Flutter 中打开动态库(dylib、dll、so)了。这些库是用 C 或 C++ 编写的。

我现在尝试构建一个基本的 dart 命令行应用程序,使用 dart compile exe 编译它并尝试使用 DynamicLibrary.open() 将它加载到我的 Flutter 应用程序中,就像您对本机所做的那样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 的空 void 函数 https://dart.dev/tutorials/server/get-started#3-create-a-small-app)

但是找不到符号:

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

问题

通常可以在 Flutter 中打开 dart 编译的库,就像用 C++ 编写的 DLL 一样吗?由于 dart compile exe 也生成本机机器代码

如果是,如何?

谢谢!

Dart 无法像其他语言那样创建共享库,因为它需要 运行 在 embedder/DartVM.

这个问题有很好的解释:

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