【问题标题】:Why do we need to resolve dependencies after `make` and `make install`?为什么我们需要在`make`和`make install`之后解决依赖关系?
【发布时间】:2019-06-20 16:14:07
【问题描述】:

https://pgmodeler.io/support/installation 说:

解决依赖关系

成功编译源代码并安装二进制文件后,我们需要将一些依赖项复制到 pgModeler 的安装文件夹以及运行一些命令以 使二进制文件正确定位它们。

GNU/Linux

1: cd $QT_ROOT/lib
2: cp libQt5DBus.so.5 libQt5PrintSupport.so.5 libQt5Widgets.so.5 libQt5Network.so.5 libQt5Gui.so.5 libQt5Core.so.5 libQt5XcbQpa.so.5 libQt5Svg.so.5 libicui18n.so.5* libicuuc.so.5* libicudata.so.5* $PGMODELER_ROOT/lib
3: cd $QT_ROOT/plugins
4: mkdir $PGMODELER_ROOT/lib/qtplugins
5: mkdir $PGMODELER_ROOT/lib/qtplugins/imageformats
6: mkdir $PGMODELER_ROOT/lib/qtplugins/printsupport
6: mkdir $PGMODELER_ROOT/lib/qtplugins/platforms
7: cp -r imageformats/libqgif.so imageformats/libqico.so imageformats/libqjpeg.so imageformats/libqsvg.so              imageformats/libqtga.so imageformats/libqtiff.so imageformats/libqwbmp.so $PGMODELER_ROOT/lib/qtplugins/imageformats
8: cp -r printsupport/libcupsprintersupport.so $PGMODELER_ROOT/lib/qtplugins/printsupport
9: cp -r platforms/libqxcb.so $PGMODELER_ROOT/lib/qtplugins/platforms
10: echo -e "[Paths]\nPrefix=.\nPlugins=lib/qtplugins\nLibraries=lib" > $PGMODELER_ROOT/qt.conf
11: cp $PGMODELER_SOURCE/start-pgmodeler.sh $PGMODELER_SOURCE/pgmodeler.vars $PGMODELER_ROOT
12: chmod +x $PGMODELER_ROOT/start-pgmodeler.sh

makemake install之后,程序运行时是否可以动态解析依赖关系(动态链接)?这样做的目的是什么?

如果我运行 sudo checkinstall 来创建 deb 文件,是否还需要像上面那样解析依赖关系?

谢谢!

【问题讨论】:

  • 注意:经常在一台电脑上编译程序,再安装在另一台电脑上(或者只是在特殊环境下编译程序)。您也可以在构建路径上安装一个仅用于编译代码的库(因为该库会与系统中的库冲突)。尤其是现在我们使用包,首先需要考虑这些假设。

标签: c installation makefile compilation pgmodeler


【解决方案1】:

看起来是为(可能)在另一台机器上部署/安装创建一个安装包。

我记得当我编写 Qt 代码(即打包所有依赖的库/插件)时,它是自动化的(在我自己的 makefile 中)。当 Qt 程序运行时,它通常会在同一个目录中查找具有确切结构的 lib/...lib/plugins/...,这样当您使用 lib 子文件夹运行已编译的可执行文件(例如在另一台机器上)时,它就会知道库在哪里。我现在不记得您是否仍需要执行任何操作,例如将 LD_LIBRARY_PATH 设置为 ./lib - 我想我记得在链接器命令中添加了一个 lib 路径。

您可以从一个旧的相关问题中看到我的答案:how-to-deploy-qt-application - 在这个答案中,我尝试使用 ldd 等工具自动化您在上面看到的这个过程。

【讨论】:

  • 谢谢。如果我运行 sudo checkinstall 来创建 deb 文件,是否还需要像上面那样解决依赖关系?
  • “创建安装包”的命令在哪里?我在网页上找不到。
  • @Ben 我没有看到sudo checkinstall 在哪里/做什么。但是通过简要阅读 pgmodeler 的网页链接,我会认为在make install 期间将完成任何所需的安装操作。然而,它看起来只安装 pgmodeler 特定文件而不是 Qt 库。例如 - 您可能已经在系统上安装了 qt(以正确的版本) - 在这种情况下,您不需要复制 Qt 库。简而言之 - 我相信答案是肯定的,如果您还没有 Qt 库,则需要复制它们。
  • 有没有办法自动选择依赖文件并复制它们,而不是手动这样做容易出错?
  • 不是真的 - (除非自从我上次查看以来事情已经发生了变化)。如果您查看我在答案末尾发布的链接,它描述了如何使用 ldd 等工具编写自己的自动化脚本......
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2014-10-29
  • 2012-09-21
  • 1970-01-01
  • 2019-05-27
  • 2021-11-04
  • 2021-08-08
相关资源
最近更新 更多