OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7291|回复: 12

llinux下QT程序能正常编译,在im6开发板上运行找不到库文件

[复制链接]

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
发表于 2020-11-1 17:23:29 | 显示全部楼层 |阅读模式
1金钱
版本是qt5.9.0


程序很简单 就在ui界面放置了一个按钮
用file命令查看里面的文件,显示的是
untitled: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=36c669b47f19b97865fd23367dd6c24939cd9ef0, not stripped

在开发板上运行显示
/ # ./untitled./untitled: error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file: No such file or directory

有没有人知道怎么回事,刚学Linux系统很多不懂,网上也查了相关问题也尝试了一些方法未能解决,希望得到大家的帮助。








最佳答案

查看完整内容[请看2#楼]

QTCreator编译出来的是使用QT动态库的应用程序,所以这个应用程序就要求其运行环境里有QT动态库,也就是《I.MX6U t Qt 移植》教程里的内容。前面教程没走通,到后面是走不下去的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-1 17:23:30 | 显示全部楼层
漫长岁月 发表于 2020-11-2 16:05
不是很明白,开发板上怎么安装QT。之前按照原子哥的 《I.MX6U t Qt 移植》教程对QT源码编译,但是make过 ...

QTCreator编译出来的是使用QT动态库的应用程序,所以这个应用程序就要求其运行环境里有QT动态库,也就是《I.MX6U t Qt 移植》教程里的内容。前面教程没走通,到后面是走不下去的。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-2 15:02:34 | 显示全部楼层

RE: llinux下QT程序能正常编译,在imx6开发板上运行找不到库文件

有人遇到同样的问题吗
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-2 15:12:26 | 显示全部楼层
要么你的开发板没有安装QT,要么你编译环境的QT跟开发板上的QT的版本不一致。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-2 16:05:53 | 显示全部楼层
ufbycd 发表于 2020-11-2 15:12
要么你的开发板没有安装QT,要么你编译环境的QT跟开发板上的QT的版本不一致。

不是很明白,开发板上怎么安装QT。之前按照原子哥的 《I.MX6U t Qt 移植》教程对QT源码编译,但是make过程一直报错,没有解决,QT源码编译失败。
后来直接安装QT-Creator按照《I.MX6U Qt 交叉编译环境搭建》教程,使用交叉编译器\fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh搭建交叉编译器环境,然后直接编译QT程序成功,放到开发板运行失败。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-2 16:24:37 | 显示全部楼层
ufbycd 发表于 2020-11-2 16:12
QTCreator编译出来的是使用QT动态库的应用程序,所以这个应用程序就要求其运行环境里有QT动态库,也就是 ...

是不是要把QT源码编译出来的lib库文件和编译后的tslib移植到开发板上?tslib源码能编译成功,qt源码make编译一直报错。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-2 20:29:54 | 显示全部楼层
ufbycd 发表于 2020-11-2 16:12
QTCreator编译出来的是使用QT动态库的应用程序,所以这个应用程序就要求其运行环境里有QT动态库,也就是 ...

大哥还在线吗,我qt源码编译出现如下错误能帮我看看什么原因吗,                                    arm-linux-gnueabihf-g++: 错误: unrecognized command line option ‘-Wshift-overflow=2’
arm-linux-gnueabihf-g++: 错误: unrecognized command line option ‘-Wduplicated-cond’
make[3]: *** [Makefile:2128:.pch/Qt5Core.gch/c++] 错误 1
make[3]: *** 正在等待未完成的任务....
make[3]: 离开目录“/home/ll/qt5.9.0/qt-everywhere-opensource-src-5.9.0/qtbase/src/corelib”
make[2]: *** [Makefile:221:sub-corelib-make_first] 错误 2
make[2]: 离开目录“/home/ll/qt5.9.0/qt-everywhere-opensource-src-5.9.0/qtbase/src”
make[1]: *** [Makefile:50:sub-src-make_first] 错误 2
make[1]: *** 正在等待未完成的任务....
make[3]: 离开目录“/home/ll/qt5.9.0/qt-everywhere-opensource-src-5.9.0/qtbase/qmake”
make[2]: 离开目录“/home/ll/qt5.9.0/qt-everywhere-opensource-src-5.9.0/qtbase/qmake”
make[1]: 离开目录“/home/ll/qt5.9.0/qt-everywhere-opensource-src-5.9.0/qtbase”
make: *** [Makefile:73:module-qtbase-make_first] 错误 2

回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2020-11-3 08:58:46 | 显示全部楼层
漫长岁月 发表于 2020-11-2 20:29
大哥还在线吗,我qt源码编译出现如下错误能帮我看看什么原因吗,                                    ar ...

换一个新点的gcc版本试试
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-3 11:55:39 | 显示全部楼层
ufbycd 发表于 2020-11-3 08:58
换一个新点的gcc版本试试

之前用的是Ubuntu20.04版本编译QT5.9.0源码,gcc用的是原子哥提供的 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,后来想可能是版本太高或者和原子哥教程版本不一致。我又重新安装了Ubuntu16.04版本,来编译qt5.5.1源码,保证和原子哥所提供的教程的版本一直,但是现在make过程又出现
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qfsfileengine.o):在函数‘QFSFileEnginePrivate::flushFh()’中:
qfsfileengine.cpp.text._ZN20QFSFileEnginePrivate7flushFhEv+0x8e):对‘qt_error_string(int)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qfsfileengine.o):在函数‘QFSFileEnginePrivate::seekFdFh(long long)’中:
qfsfileengine.cpp.text._ZN20QFSFileEnginePrivate8seekFdFhEx+0x132):对‘qt_error_string(int)’未定义的引用
qfsfileengine.cpp.text._ZN20QFSFileEnginePrivate8seekFdFhEx+0x191):对‘qt_error_string(int)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qfsfileengine.o):qfsfileengine.cpp.text._ZN20QFSFileEnginePrivate8readFdFhEPcx+0xb5): 跟着更多未定义的参考到 qt_error_string(int)
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qtextcodec.o):在函数‘QTextCodec::codecForLocale()’中:
qtextcodec.cpp.text._ZN10QTextCodec14codecForLocaleEv+0x17c):对‘qgetenv(char const*)’未定义的引用
qtextcodec.cpp.text._ZN10QTextCodec14codecForLocaleEv+0x1a0):对‘qgetenv(char const*)’未定义的引用
qtextcodec.cpp.text._ZN10QTextCodec14codecForLocaleEv+0x1e0):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qloggingregistry.o):在函数‘qtLoggingDebug()’中:
qloggingregistry.cpp.text._ZL14qtLoggingDebugv+0x48):对‘qEnvironmentVariableIsSet(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qloggingregistry.o):在函数‘QLoggingRegistry::init()’中:
qloggingregistry.cpp.text._ZN16QLoggingRegistry4initEv+0x32):对‘qgetenv(char const*)’未定义的引用
qloggingregistry.cpp.text._ZN16QLoggingRegistry4initEv+0x5f):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qlogging.o):在函数‘isFatal(QtMsgType) [clone .part.1]’中:
qlogging.cpp:(.text._ZL7isFatal9QtMsgType.part.1+0x48):对‘qEnvironmentVariableIsEmpty(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qlogging.o):在函数‘isFatal(QtMsgType)’中:
qlogging.cpp:(.text._ZL7isFatal9QtMsgType+0x78):对‘qEnvironmentVariableIsEmpty(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qlogging.o):在函数‘QMessagePattern:MessagePattern()’中:
qlogging.cpp:(.text._ZN15QMessagePatternC2Ev+0x4b):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qfilesystemengine_unix.o):在函数‘QFileSystemEngine::homePath()’中:
qfilesystemengine_unix.cpp:(.text._ZN17QFileSystemEngine8homePathEv+0x2d):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qfilesystemengine_unix.o):在函数‘QFileSystemEngine::tempPath()’中:
qfilesystemengine_unix.cpp:(.text._ZN17QFileSystemEngine8tempPathEv+0x28):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qstandardpaths_unix.o):在函数‘xdgConfigDirs()’中:
qstandardpaths_unix.cpp:(.text._ZL13xdgConfigDirsv+0x37):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qstandardpaths_unix.o):在函数‘xdgDataDirs()’中:
qstandardpaths_unix.cpp:(.text._ZL11xdgDataDirsv+0x39):对‘qgetenv(char const*)’未定义的引用
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qstandardpaths_unix.o):qstandardpaths_unix.cpp:(.text._ZN14QStandardPaths16writableLocationENS_16StandardLocationE+0x5b): 跟着更多未定义的参考到 qgetenv(char const*)
/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/lib/libQt5Bootstrap.a(qstandardpaths_unix.o):在函数‘QStandardPaths::writableLocation(QStandardPaths::StandardLocation)’中:
qstandardpaths_unix.cpp:(.text._ZN14QStandardPaths16writableLocationENS_16StandardLocationE+0x139d):对‘qt_error_string(int)’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:148: recipe for target '../../../bin/moc' failed
make[3]: *** [../../../bin/moc] Error 1
make[3]: Leaving directory '/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/src/tools/moc'
Makefile:87: recipe for target 'sub-moc-make_first' failed
make[2]: *** [sub-moc-make_first] Error 2
make[2]: Leaving directory '/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase/src'
Makefile:45: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/li/qt5.5.1/qt-everywhere-opensource-src-5.5.1/qtbase'
Makefile:72: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-1-15
在线时间
34 小时
 楼主| 发表于 2020-11-3 13:50:45 | 显示全部楼层
本帖最后由 漫长岁月 于 2020-11-3 14:04 编辑
ufbycd 发表于 2020-11-3 08:58
换一个新点的gcc版本试试

大哥我QT5.5.1源码编译成功了,使用的是Ubuntu16.04版本,之前编译一直用make -j16 命令,我以为我分配的核心数达不到16个,会默认按照我分配的最大核心数进行编译,其实不是这样。后来我把之前编译失败的源码进行了make clean,然后直接make不加任何参数,源码编译成功,make install成功。最后还是要感谢大哥的指点,其实我也是瞎子摸象,没搞懂其中原理,回头再编译高版本的试试。下面移植qt到开发板上试试。
回复

使用道具 举报

3

主题

72

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1305
金钱
1305
注册时间
2015-12-3
在线时间
160 小时
发表于 2020-11-12 09:54:12 | 显示全部楼层
MRAK一下
回复

使用道具 举报

0

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1124
金钱
1124
注册时间
2013-8-23
在线时间
158 小时
发表于 2021-1-5 11:17:53 | 显示全部楼层
ubuntu能运行是PC机的运行环境, ARM需要采用交叉编译的运行环境,
库文件名字看着一样其实不同
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-10-21
在线时间
6 小时
发表于 2021-5-10 15:04:20 来自手机 | 显示全部楼层
编译为静态库程序试一下 后缀 -static
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表