找回密码
 立即注册
收起左侧

it could not find or load the Qt platform plugin "linuxfb"

5
回复
7936
查看
[复制链接]

尚未签到

来源: 2019-5-30 12:13:51 显示全部楼层 |阅读模式
1Qter豆
大家好, 刚开始做Qt,加入这个社区,没有额外的Qter 豆,请见谅。
  我的目的是移植Qt5.5.1版本到海思开发板。用Ubuntu的交叉编译链编译了Qt5.5.1版本源码,并修改了linuxfb与海思frame buffer初始化部分代码。我用的configure配置如下:

./configure -release -opensource -c++11 -shared -no-largefile -accessibility -qml-debug -platform linux-g++ -qt-zlib -mtdev -no-journald -qt-libpng -qt-libjpeg -qt-freetype -no-openssl -no-libproxy -no-tslib -no-glib -no-pulseaudio -no-alsa -no-gtkstyle -skip qtwebchannel -skip qtcanvas3d -skip qtwebkit -silent -no-cups -evdev -nomake examples -nomake tests -no-pch -no-dbus -xplatform arm-hisiv500-linux-g++ -prefix /home/HI3519V101/20-hi3519v101_xianwei/4keptz_project/4keptz_project.si4project/Qt -rpath



安装目录为/home/HI3519V101/20-hi3519v101_xianwei/4keptz_project/4keptz_project.si4project/Qt, 这是Ubuntu上的路径。然后写了个简单的demo,并且交叉编译成功。
然后开发板用NFS挂载访问可执行文件和链接库。但是执行时遇到这个错误:Application failed to start because it could not find or load the Qt platform plugin "linuxfb"。 我的环境变量都设置好了:

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_DEBUG_PLUGINS=1
export QTDIR=my NFS path/Qt5.5.1
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/platforms
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins/platforms/

DEBUG信息为:

QFactoryLoader::QFactoryLoader() checking directory path "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so"
Found metadata in lib /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"linuxfb"
]
},
"className": "QLinuxFbIntegrationPlugin",
"debug": false,
"version": 328961
}

Got keys from plugin meta data ("linuxfb")
QFactoryLoader::QFactoryLoader() looking at "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqminimal.so"
Found metadata in lib /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqminimal.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimal"
]
},
"className": "QMinimalIntegrationPlugin",
"debug": false,
"version": 328961
}

Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqoffscreen.so"
Found metadata in lib /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqoffscreen.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"offscreen"
]
},
"className": "QOffscreenIntegrationPlugin",
"debug": false,
"version": 328961
}

Got keys from plugin meta data ("offscreen")
loaded library "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so"
QLibraryPrivate::loadPlugin failed on "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so" : "Cannot load library /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so: (File not found)"
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ipnc/4keptz_project/4keptz_project.si4project/mg-samples-3.0.12/src/qt/platforms" ...
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/platforms" ...
This application failed to start because it could not find or load the Qt platform plugin "linuxfb".



提示Cannot load library /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms/libqlinuxfb.so: (**File not found**) 这是我NFS挂载的路径,但是这个路径下的确是有libqlinuxfb.so的。

ls /opt/ipnc/4keptz_project/4keptz_project.si4project/Qt/plugins/platforms
libqlinuxfb.so    libqminimal.so    libqoffscreen.so

这是为什么呢?

回复

使用道具 举报

累计签到:118 天
连续签到:2 天
2019-5-30 14:03:32 显示全部楼层
有可能是没找到库文件支持的问题。
下面的方法你试下:
1.在你的可执行文件那里带上platforms文件夹
2、在程序的主函数那里加上:QCoreApplication::addLibraryPath("./");或者你实际打印下程序的环境变量:    qDebug() << "library paths: " << QCoreApplication::libraryPaths();
回复

使用道具 举报

尚未签到

2019-5-30 16:46:48 显示全部楼层
还是一样的问题, 我看了qt源码,在qlibrary_unix.cpp中,load_sys()函数的dlopen()时,返回的都是NULL,错误是FIle not Found, 但是我的库文件确实是在那个位置。是不是因为libqlinuxfb.so还有其他链接库,但是没有找到其他链接库呢?但是我的LD_LIBRARY_PATH也都有包含其他动态库文件啊。
回复

使用道具 举报

尚未签到

2019-5-30 16:47:21 显示全部楼层
zhuxianfei 发表于 2019-5-30 14:03
有可能是没找到库文件支持的问题。
下面的方法你试下:
1.在你的可执行文件那里带上platforms文件夹

还是一样的问题, 我看了qt源码,在qlibrary_unix.cpp中,load_sys()函数的dlopen()时,返回的都是NULL,错误是FIle not Found, 但是我的库文件确实是在那个位置。是不是因为libqlinuxfb.so还有其他链接库,但是没有找到其他链接库呢?但是我的LD_LIBRARY_PATH也都有包含其他动态库文件啊。
回复

使用道具 举报

尚未签到

2019-5-30 17:09:15 显示全部楼层
zhuxianfei 发表于 2019-5-30 14:03
有可能是没找到库文件支持的问题。
下面的方法你试下:
1.在你的可执行文件那里带上platforms文件夹

哎呀, 我弄好了, 我在libqlinuxfb.so里面加了个第三方so文件,但是忘记把这个第三方文件的路径包含在LD_LIBRARY_PATH里了。Thanks for reply, anyway.
回复

使用道具 举报

累计签到:118 天
连续签到:2 天
2019-5-30 17:54:10 显示全部楼层
kevin.Wu 发表于 2019-5-30 17:09
哎呀, 我弄好了, 我在libqlinuxfb.so里面加了个第三方so文件,但是忘记把这个第三方文件的路径包含在LD ...

呵呵,自己从坑里爬出来还是蛮有成就感的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了