在 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.
中
这个问题有很好的解释:
很久以前就可以在 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.
中这个问题有很好的解释: