使用CMake创建独立QML模块的自定义ImageProvider插件遇链接错误
解决QML独立ImageProvider模块链接错误问题
问题现象
构建时链接器报错:
/usr/bin/ld: CMakeFiles/nVision-app.dir/main.cpp.o: in function _GLOBAL__sub_I__Z16printQtResourcesb': main.cpp:(.text.startup+0x6e): undefined reference to qt_static_plugin_ImgProvPlugin()'
解决步骤
1. 主应用链接插件模块
修改根目录下的CMakeLists.txt,在target_link_libraries中添加插件目标imgprovplugin,让主程序能找到插件的静态符号:
target_link_libraries(${APP_TARGET} PRIVATE Qt6::Gui Qt6::Qml Qt6::Quick imgprovplugin # 新增:链接到自定义ImageProvider插件模块 )
2. 配置插件模块为静态构建
修改cpp/imgprov/CMakeLists.txt,在qt_add_qml_module中添加STATIC选项——因为Q_IMPORT_QML_PLUGIN用于静态导入插件,必须确保插件编译为静态库:
qt_add_qml_module(${MODULE_TARGET} URI ImgProv PLUGIN_TARGET ${MODULE_TARGET} NO_PLUGIN_OPTIONAL NO_GENERATE_PLUGIN_SOURCE CLASS_NAME ImgProvPlugin SOURCES ${HEADERS} ${SOURCES} STATIC # 新增:指定模块为静态构建 )
3. 验证插件代码正确性
确保plugin.cpp中的插件类实现符合要求:
- 正确继承
QQmlEngineExtensionPlugin Q_PLUGIN_METADATA的IID设置为QQmlEngineExtensionInterface_iid- 在
initializeEngine中正确添加ImageProvider
完成以上修改后,重新构建项目即可解决链接错误。
内容的提问来源于stack exchange,提问作者skaldesh
相关产品推荐
相关产品推荐

