【已解决】关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

软件和网站开发以及相关技术探讨
回复
CoderWkm
帖子: 8
注册时间: 2023-09-12 11:37
系统: Ubuntu20.04

【已解决】关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#1

帖子 CoderWkm » 2023-09-12 17:42

一个QT项目
原系统:Fedora17。希望移植到Ubuntu20.04LTS
将项目复制到Ubuntu22.04后,运行可执行文件(用户有权限),提示:No such file or directory
感觉是和库函数有关。

个人认为需要熟悉一下QT的用法,希望有QT项目经验的前辈给予一点可能出错的方向,加速排错的过程,谢谢了
上次由 CoderWkm 在 2023-09-27 10:14,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#2

帖子 astolia » 2023-09-13 9:44

先把完整的命令行下运行结果发上来在再说。光说个No such file or directory,前面的呢?
如果前面是你可执行程序的名字,那十有八九是elf interpreter没找到,用readelf -l /path/to/your/program来看interpreter是什么

另外,直接复制可执行文件不叫移植。图省事的话,直接把源代码拿到ubuntu上重新编译一遍
CoderWkm
帖子: 8
注册时间: 2023-09-12 11:37
系统: Ubuntu20.04

Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#3

帖子 CoderWkm » 2023-09-13 18:14

astolia 写了: 2023-09-13 9:44 先把完整的命令行下运行结果发上来在再说。光说个No such file or directory,前面的呢?
如果前面是你可执行程序的名字,那十有八九是elf interpreter没找到,用readelf -l /path/to/your/program来看interpreter是什么

另外,直接复制可执行文件不叫移植。图省事的话,直接把源代码拿到ubuntu上重新编译一遍
1. 感谢指导。我是将整个项目,包括在fedora上的cpp文件, .o文件,可执行文件都拷贝过来,不是直接复制了可执行文件。执行情况如下:
图片

2. 根据您的提示,readelf命令的结果如下:
图片
您提到的interpreter与cpp程序有关吗?通常不应该是compiler吗?

3. 这个项目除了qt部分还集成了一些其他的开源工具。在ubuntu重新编译的话,个人认为qt部分的代码应该是需要导入qt creator,目前正在尝试。其他东西需要自己重写makefile,还是把原来的makefile修改一下呢?

4. 第一次提问,问题没有表述清楚请您谅解,感谢您的回复。
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#4

帖子 astolia » 2023-09-13 22:07

CoderWkm 写了: 2023-09-13 18:14 您提到的interpreter与cpp程序有关吗?通常不应该是compiler吗?
你遇到的问题和源码和语言无关,没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位版还简单点。
CoderWkm 写了: 2023-09-13 18:14 3. 这个项目除了qt部分还集成了一些其他的开源工具。在ubuntu重新编译的话,个人认为qt部分的代码应该是需要导入qt creator,目前正在尝试。其他东西需要自己重写makefile,还是把原来的makefile修改一下呢?
如果你不打算以后在ubuntu上开发的话,没必要装qtcreator。直接用qmake或cmake将.pro文件或cmakelists.txt文件转成makefile然后make就成。不过我没在你的图里看到.pro或cmakelists.txt文件,如果你的makefile是手写的话,先用着呗,有不对的再改就是了。
CoderWkm
帖子: 8
注册时间: 2023-09-12 11:37
系统: Ubuntu20.04

Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#5

帖子 CoderWkm » 2023-09-20 11:54

astolia 写了: 2023-09-13 22:07
CoderWkm 写了: 2023-09-13 18:14 您提到的interpreter与cpp程序有关吗?通常不应该是compiler吗?
你遇到的问题和源码和语言无关,没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位版还简单点。
CoderWkm 写了: 2023-09-13 18:14 3. 这个项目除了qt部分还集成了一些其他的开源工具。在ubuntu重新编译的话,个人认为qt部分的代码应该是需要导入qt creator,目前正在尝试。其他东西需要自己重写makefile,还是把原来的makefile修改一下呢?
如果你不打算以后在ubuntu上开发的话,没必要装qtcreator。直接用qmake或cmake将.pro文件或cmakelists.txt文件转成makefile然后make就成。不过我没在你的图里看到.pro或cmakelists.txt文件,如果你的makefile是手写的话,先用着呗,有不对的再改就是了。
抱歉前几天有点事情没有即使回复您。
感谢您,我现在大概知道了,就是链接的静态库是32位 :Cry ,重新运行make了一下链接库,大部分都改过来了,就是有以下两个目标文件,我在工程目录下边找不到,我回头再看看。如果您有提示,希望不吝赐教:
图片
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: 关于其他linux发行版开发的软件项目移植到ubuntu不能运行的问题

#6

帖子 astolia » 2023-09-20 12:57

你没做make clean或者Makefile里的clean规则没写好。这些个编译出的.a文件该和.o一起删掉的

这两个大概是pcre库里的,可以用sudo apt install libpcre3-dev来安装。另外现在还用pcre的都应该迁移到pcre2上去
回复