我对 C、qt 和 cmake 没有经验。
我花了最后 10 个小时尝试构建这个项目: https://github.com/moonlight-stream/moonlight-qt
我的主要目标是自己构建它并在 Ubuntu 上运行它。
自述文件描述了为了构建我需要安装所有这些库:
openssl-devel qt5-devel SDL2-devel ffmpeg-devel qt5-qtquickcontrols2-devel libva-devel libvdpau-devel opus-devel pulseaudio-libs-devel alsa-lib-devel SDL2_ttf-devel
我试图在 Ubuntu 上构建它,但我发现这些库无法通过简单的“apt”命令安装。我尝试使用 ubuntu 的库,但是(例如)在安装“libssl-dev”之后,cmake 安装了最新的 Fedora,然后使用 yum 安装了库并成功构建了项目。
之后,我将二进制文件复制到我的Ubuntu系统中,但无法运行它。我的 Ubuntu 上缺少很多共享库。另外,我的 Ubuntu 的 qt 版本比在 Fedora 上构建时使用的版本要旧。
从 github“releases”选项卡下载的 Ubuntu 编译版本运行良好。
因为我不知道具体如何解决我的问题,所以我有3个问题:
- 在 Fedora 下构建并在 Ubuntu 下运行有意义吗?
- 我可以以某种方式强制“make”命令将所有这些共享库和 qt 相关库包含到项目中吗?
- 如果没有,也许我可以在 Ubuntu 上安装 yum,然后我可以轻松安装推荐的库?
答案1
- 在 Fedora 下构建并在 Ubuntu 下运行是否有意义?
不,不要尝试。至少不是那样的。你可以有时避免在“姐妹”发行版之间迁移(例如:Debian、Ubuntu 和 Mint 之间,或者 CentOS、Fedora 和 RHEL 之间)。但是,当跨越主要分支时,您几乎总是会遇到所见过的问题,例如库版本不匹配。
- 我可以以某种方式强制“make”命令将所有这些共享库和 qt 相关库包含到项目中吗?
实际上可以手动复制所有共享库并使用它们。唯一的挑战可能是它们之间的内核不同。 但我不推荐这样做。 你不会要求make
这样做。找到.so
该项目的可执行文件或构建的文件,并检查它需要使用哪些库ldd
。您需要将它们放在一个目录中并设置LD_LIBRARY_PATH跑步前。同样,这也是不可取的。
- 如果没有,也许我可以在 Ubuntu 上安装 yum,然后我可以轻松安装推荐的库?
这是一个更糟糕的想法。我不愿意去想这两个系统会如何争斗并搞砸你的操作系统。
您的最佳选择:在 Ubuntu 上进行构建
如果确实无法构建,请在 github 上提出问题。
这些软件包很可能存在于 Ubuntu 中,但您可能需要调查软件包的名称,因为它们在 Ubuntu 和 Fedora 中有所不同。例如libssl 开发。
首先搜索名称中可能会成功的最小部分...例如:
apt-cache search libssl
cl-plus-ssl - Common Lisp interface to OpenSSL
dcmtk - OFFIS DICOM toolkit command line utilities
libdcmtk-dev - OFFIS DICOM toolkit development libraries and headers
libdcmtk14 - OFFIS DICOM toolkit runtime libraries
dlang-openssl - D version of the C headers for openssl
libssl-ocaml - OCaml bindings for OpenSSL (runtime)
libssl-ocaml-dev - OCaml bindings for OpenSSL
* libssl-dev - Secure Sockets Layer toolkit - development files
libssl-doc - Secure Sockets Layer toolkit - development documentation
libssl1.1 - Secure Sockets Layer toolkit - shared libraries
perl-openssl-defaults - version compatibility baseline for Perl OpenSSL packages
r-cran-openssl - GNU R toolkit for encryption, signatures and certificates based on OpenSSL
libssl-utils-clojure - library for SSL certificate management on the JVM