小编典典

我在哪里放置第三方库来建立C ++ Linux开发环境?

linux

尽管我是Linux的新手,但我对C
++并不陌生。我正在使用CMake来预编译带有某些第三方组件的跨平台游戏引擎,但是我对使用库存在很多疑问。我的问题是如何使用第三方库以及将它们放在哪里。Apt将libs安装在其官方位置(/
usr / local,/ usr / lib / ..),但是我在Windows中使用项目目录中文件夹中的本地libs进行开发。

另外,我需要一个很好的教程来了解库的工作规则。例如:当尝试编译我的项目时,luabind要求提供liblua.s0.1,但是AFAIK无法使用Lua提供的源生成该库(至少进行make,make
install)。

我知道,这个问题很模糊,但是我没有足够的经验来简化。

更新 :阅读一些答案后,下面是一个更简洁的问题。如果安装了所有第三方库,如何分发程序?如何在不使用大型自述文件的情况下管理依赖项?


阅读 325

收藏
2020-06-07

共1个答案

小编典典

在哪里放置图书馆

最好的解决办法是使用Linux发布版的包装系统(apt-getyum或类似)从发行版提供的软件包安装库尽可能。

如果发行版的打包库的版本不够新,或者您需要一些非标准的构建选项,或者您需要发行版不提供的库,那么您可以自己构建和安装它。您有两个主要的库放置位置:

  • /usr/local(库位于/usr/local/lib,标题位于/usr/local/include)。这将在系统范围内安装库,这可能是最简单的解决方案,因为您应该可以在不进行任何额外步骤的情况下针对它们进行构建。不要将库直接安装在之下/usr,因为这会干扰发行版的打包系统。
  • 在项目目录下,就像在Windows下一样。这样的优点是不需要root用户访问权限,也不需要进行系统范围的更改,但是您必须更新项目的包含路径和库路径,并且必须将所有共享库文件放在动态链接程序可以找到它们的某个位置(使用LD_LIBRARY_PATHld.so.conf-请参阅链接以获取更多详细信息)。

图书馆如何运作

请参阅David A. Wheeler出色的编程库HOWTO。我建议您阅读该文章,然后将任何特定问题发布为新主题。

如何分发程序

传统上,Unix /
Linux程序不包括其依赖项的副本。而是由最终用户或开发人员自行安装这些依赖项。正如您所说,这可能需要“大型自述文件”,但它有一些优点:

  • 可以通过发行版的程序包管理器来安装,管理和更新开发库,而不是每个源副本都有自己的要跟踪的库集。
  • 系统上任何给定库的副本只有一个,因此,例如,如果发现安全漏洞,则只有一个地方需要更新。(例如,请考虑一下当zlib(一种非常广泛使用的压缩库)被发现存在安全漏洞时所造成的混乱,因此,每个包含受影响版本的应用程序都需要进行更新。)
  • 如果您的程序足够流行(并且是开源的或至少免费提供的),则各种Linux发行版的软件包维护者可能希望对其进行打包并将其包含在发行版中。软件包维护者 确实 不喜欢捆绑的库。例如,请参阅Fedora关于该主题的页面

如果您要将程序分发给最终用户,则可能需要考虑提供一个软件包(.dpkg.rpm),使他们可以简单地下载和安装而不用使用源代码。从最终用户的角度来看,理想情况下,应将软件包添加到发行版的存储库中(如果它是开源的,或者至少是免费提供的),以便用户可以使用其软件包管理器(apt- getyum)下载它。由于那里有大量的Linux发行版,这一切都可能变得复杂,但是与Debian / Ubuntu兼容.dpkg以及与Red
Hat / CentOS / Fedora兼容的Linux .rpm应该覆盖了很大一部分最终用户。构建软件包并不难,并且在线有很好的howto。

2020-06-07