gpt4 book ai didi

linux - linux上的Dart/Flutter ffi - 配置CMake的问题

转载 作者:行者123 更新时间:2023-12-03 03:31:52 24 4
gpt4 key购买 nike

我目前需要在我的 Flutter 项目中为 Linux 桌面应用程序调用 C++ 函数(使用 dart:ffi)。本页https://flutter.dev/docs/development/platform-integration/c-interop#first-party-library没有说明如何在 Linux 上配置此类项目(Windows 也不适用)。
经过几次尝试,我无法正确链接 C++ 库。
C++ 函数

#include<iostream>
extern "C" {
void do_something(const char *program_name, const char *password)
{
//Do something with data

}
}
我将以下行添加到 CMakeLists.txt :
add_library(my_native STATIC ../native_lib/my_native.cpp)
target_link_libraries(${BINARY_NAME} PUBLIC my_native)
最后,我通过以下方式在 Dart 中链接:
// Since the CMake code was added in the executable CMakeLists.txt, it seems that it
// is supposed to be done that way, with DynamicLibrary.executable() rather than DynamicLibrary.process()
// method
final DynamicLibrary lib = DynamicLibrary.executable();
final doSomethingFuncPointer = lib.lookup<NativeFunction<do_something_signature>>("do_something");
它编译正常,但在启动时,程序返回以下错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(171)] Unhandled Exception: Invalid argument(s): Failed to lookup symbol (/home/me/Documents/flutter/desktop_installer_framework/build/linux/debug/bundle/installer: undefined symbol: do_something)
我还尝试了动态链接(在 CMakeLists.txt 中将库标记为 SHARED 并将其与 DynamicLibrary.open("libmy_native.so") 链接)。也试过调用 DynamicLibrary.process()并将 CMake 行放在第二个 CMakeLists.txt(linux/flutter 中的那个)中。它永远不会找到符号。所以,我想我在这里遗漏了一些东西。
任何帮助,将不胜感激。
最好的祝福

最佳答案

您已经展示了定义;这也是宣言吗?如果是这样(这似乎很可能,因为你有 extern 那里)你错过了 visibiltyused您链接到的页面描述需要 C++ 的注释,这可以解释为什么该符号不在生成的二进制文件中。

关于linux - linux上的Dart/Flutter ffi - 配置CMake的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63437084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com