一个QT项目
原系统:Fedora17。希望移植到Ubuntu20.04LTS
将项目复制到Ubuntu22.04后,运行可执行文件(用户有权限),提示:No such file or directory
感觉是和库函数有关。
个人认为需要熟悉一下QT的用法,希望有QT项目经验的前辈给予一点可能出错的方向,加速排错的过程,谢谢了
【已解决】关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
-
- 帖子: 8
- 注册时间: 2023-09-12 11:37
- 系统: Ubuntu20.04
【已解决】关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
上次由 CoderWkm 在 2023-09-27 10:14,总共编辑 1 次。
- astolia
- 论坛版主
- 帖子: 6492
- 注册时间: 2008-09-18 13:11
Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
先把完整的命令行下运行结果发上来在再说。光说个No such file or directory,前面的呢?
如果前面是你可执行程序的名字,那十有八九是elf interpreter没找到,用readelf -l /path/to/your/program来看interpreter是什么
另外,直接复制可执行文件不叫移植。图省事的话,直接把源代码拿到ubuntu上重新编译一遍
如果前面是你可执行程序的名字,那十有八九是elf interpreter没找到,用readelf -l /path/to/your/program来看interpreter是什么
另外,直接复制可执行文件不叫移植。图省事的话,直接把源代码拿到ubuntu上重新编译一遍
-
- 帖子: 8
- 注册时间: 2023-09-12 11:37
- 系统: Ubuntu20.04
Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
1. 感谢指导。我是将整个项目,包括在fedora上的cpp文件, .o文件,可执行文件都拷贝过来,不是直接复制了可执行文件。执行情况如下:
2. 根据您的提示,readelf命令的结果如下:
您提到的interpreter与cpp程序有关吗?通常不应该是compiler吗?
3. 这个项目除了qt部分还集成了一些其他的开源工具。在ubuntu重新编译的话,个人认为qt部分的代码应该是需要导入qt creator,目前正在尝试。其他东西需要自己重写makefile,还是把原来的makefile修改一下呢?
4. 第一次提问,问题没有表述清楚请您谅解,感谢您的回复。
- astolia
- 论坛版主
- 帖子: 6492
- 注册时间: 2008-09-18 13:11
Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
你遇到的问题和源码和语言无关,没compiler的事。
interpreter是runtime linker,负责在程序运行时处理需要的共享库或者按windows上的说法是动态链接库。具体细节可以看这篇 https://lwn.net/Articles/631631/
从readelf的输出来看,你这个程序是32位程序,interpreter是/lib/ld-linux.so.2。你用的系统是ubuntu 22.04,它只有64位版,所以默认情况下没有安装任何32位的库,那个interpreter也没有。所以你运行它时会有no such file的错,实际上就是指interpreter没找到。
要想让程序跑起来,就要补上相关的库和interpreter。/lib/ld-linux.so.2包含在libc6:i386里,你用sudo apt install libc6:i386安装后再运行它,就会报具体缺哪些其他的共享库了。一样通过sudo apt install 包名:i386这样的方式来安装。
当然一个个补包很麻烦,所以我建议你图省事的话重新编译成64位版还简单点。
如果你不打算以后在ubuntu上开发的话,没必要装qtcreator。直接用qmake或cmake将.pro文件或cmakelists.txt文件转成makefile然后make就成。不过我没在你的图里看到.pro或cmakelists.txt文件,如果你的makefile是手写的话,先用着呗,有不对的再改就是了。
-
- 帖子: 8
- 注册时间: 2023-09-12 11:37
- 系统: Ubuntu20.04
Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
抱歉前几天有点事情没有即使回复您。astolia 写了: ↑2023-09-13 22:07你遇到的问题和源码和语言无关,没compiler的事。
interpreter是runtime linker,负责在程序运行时处理需要的共享库或者按windows上的说法是动态链接库。具体细节可以看这篇 https://lwn.net/Articles/631631/
从readelf的输出来看,你这个程序是32位程序,interpreter是/lib/ld-linux.so.2。你用的系统是ubuntu 22.04,它只有64位版,所以默认情况下没有安装任何32位的库,那个interpreter也没有。所以你运行它时会有no such file的错,实际上就是指interpreter没找到。
要想让程序跑起来,就要补上相关的库和interpreter。/lib/ld-linux.so.2包含在libc6:i386里,你用sudo apt install libc6:i386安装后再运行它,就会报具体缺哪些其他的共享库了。一样通过sudo apt install 包名:i386这样的方式来安装。
当然一个个补包很麻烦,所以我建议你图省事的话重新编译成64位版还简单点。
如果你不打算以后在ubuntu上开发的话,没必要装qtcreator。直接用qmake或cmake将.pro文件或cmakelists.txt文件转成makefile然后make就成。不过我没在你的图里看到.pro或cmakelists.txt文件,如果你的makefile是手写的话,先用着呗,有不对的再改就是了。
感谢您,我现在大概知道了,就是链接的静态库是32位 ,重新运行make了一下链接库,大部分都改过来了,就是有以下两个目标文件,我在工程目录下边找不到,我回头再看看。如果您有提示,希望不吝赐教:
- astolia
- 论坛版主
- 帖子: 6492
- 注册时间: 2008-09-18 13:11
Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题
你没做make clean或者Makefile里的clean规则没写好。这些个编译出的.a文件该和.o一起删掉的
这两个大概是pcre库里的,可以用sudo apt install libpcre3-dev来安装。另外现在还用pcre的都应该迁移到pcre2上去
这两个大概是pcre库里的,可以用sudo apt install libpcre3-dev来安装。另外现在还用pcre的都应该迁移到pcre2上去