Ubuntu18.04下Flutter Linux插件新增类CMake链接报错求助
问题根因
- 你的猜测完全正确,Flutter创建插件生成的默认CMakeLists.txt不会自动识别新增的源文件,编译阶段能通过是因为头文件路径已配置,编译器可以找到函数声明,链接阶段需要匹配函数实现时,新增的.cc文件没有被加入编译列表,因此找不到对应实现抛出未定义引用错误。
- 直接把实现写在xxx_plugin.cc中正常运行的原因是所有代码都在同一个编译单元,无需跨编译单元链接即可找到所有实现。
修复方法
必须手动修改插件linux目录下的CMakeLists.txt,具体操作如下:
- 打开路径为
<插件根目录>/linux/CMakeLists.txt的配置文件 - 找到定义插件源文件的
set(PLUGIN_SOURCES)配置块,默认仅包含自动生成的插件实现文件,将你新增的linux_recorder.cc追加到列表中:
# 修改前的默认配置示例(以vc_sound插件为例) set(PLUGIN_SOURCES vc_sound_plugin.cc ) # 修改后的配置 set(PLUGIN_SOURCES vc_sound_plugin.cc linux_recorder.cc )
- 如果后续新增其他.cc实现文件,都需要按上述规则追加到
PLUGIN_SOURCES列表中 - 保存文件后执行
flutter clean清除旧的编译缓存,再重新运行flutter run即可正常链接。 - 你的头文件存放路径符合Flutter Linux插件的规范,无需额外修改头文件搜索路径配置,引用时使用
#include <plugin/linux_recorder.h>即可正常识别。
内容的提问来源于stack exchange,提问作者user2533922
相关产品推荐
相关产品推荐

