使用共享库编译的Qt应用程序打包

3
我最近在我的Linux机器上下载了Qt嵌入式演示源代码。以下是程序运行期间的结果:
  1. 我在我的x86机器上静态编译并在该机器上运行应用程序,没有问题。但是当我将静态编译的二进制文件拿到Atom平台的另一台机器上时,缺少了一些小部件。我发现插件不能被静态编译移植。有人能告诉我这是否正确吗?如果不是,有人能告诉我步骤吗?
  2. 我使用共享库动态编译它,然后在Linux上得到可执行文件。我使用“ldd MyAppName”命令查看了它所使用的共享库文件。但是我不知道如何打包它们,有人能告诉我打包的步骤吗?
我查阅了关于在X11-linux平台上部署Qt应用程序的文章。但是它不完整。有人可以给我详细的步骤吗?
感谢任何帮助......
3个回答

2

你要么使用的发行版不支持 Atom,要么使用的库没有编译支持 Atom。无论哪种情况,你的系统(或 qt)中的某些内容都未针对 Atom 进行编译。


我有Ubuntu发行版,目前正在Atom机器上运行。我只需要开发Qt应用程序,编译和链接,然后想将其移植到运行Ubuntu Linux的目标Atom机器上。但是我不知道如何打包应用程序动态链接库。你能帮我吗? - Surjya Narayana Padhi

1

我刚刚动态编译了我的应用程序并移植到了Atom平台。我找到了依赖项并进行了移植,然后在目标机器上设置了LD_LIBRARY_PATH环境变量以使用我移植的共享库,结果成功了。感谢大家的建议。


1
问题在于您正在编译应用程序,而其库(静态或动态)适用于x86,而非Atom。也许您可以创建某种fat binary(lipo?),以使应用程序的部分功能在x86和Atom上运行,但是使用仅限于x86的库的代码将无法在Atom上运行。(对吗?这是您问题的简洁定义吧?)
如果您拥有不适用于Atom的库的源代码,并且它们很重要,请考虑将代码移植到Atom。如果这是开源代码,您可以为项目做出贡献。尽管您没有提供太多细节,但我(非常通用地)处理此类问题的方法是在Atom机器上获取代码,为库编写一个非常短的测试应用程序,并解决问题。
关于#2:编译应用程序和链接到共享库或动态库之间几乎没有什么区别。在您的x86机器上,如果将此代码(这些“插件”)编译为动态库,则与将这些二进制文件静态连接到应用程序中几乎相同。这些库将在x86上工作,无论它们是动态链接还是静态链接。

我不确定这是否非常有帮助——如果你得到的是没有源代码的二进制Qt插件,作为静态或动态库,那么你就没有办法了。提交一个缺陷报告吧。如果你有源代码,你可以做更多的事情。


实际上,我的目标机器有原子处理器,我认为处理器不是问题,因为我能够运行静态链接的可执行文件(主GUI已经启动,但只是缺少一些小部件)。如果平台是个问题,我根本就无法运行。我只需要知道如何打包一个动态链接的QT应用程序,如果我知道它包含哪些共享库。你能告诉我如何打包一个动态链接的QT应用程序吗?对不起,麻烦你了。 - Surjya Narayana Padhi
所以共享库在Atom上能工作吗?动态链接应用程序分发的问题在于依赖项--目标机器必须安装正确版本的这些库。这超出了我的专业知识范围,但我想你可以创建一个rpm或deb(或其他)软件包来安装dylibs,或者至少将它们列为所需依赖项。您还可以通过将dylibs包含在您的distro中并创建安装程序脚本来进行更糟糕的黑客攻击(容易出错等...)在您的情况下,静态链接似乎很合适。我不确定您该如何做,因此无法提供更多帮助。 - jibberia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接