Where to put libraries
最好的解决方案是尽可能使用Linux发行版的打包系统(apt-get
、yum
或类似)从发行版提供的软件包中安装库.
如果发行版的打包库的版本不够新,或者您需要一些非标准的构建选项,或者您需要发行版不提供的库,那么您可以自己构建并安装它.在放置库的位置上有两个主要选项:
/usr/local
(/usr/local/lib
以下为库,/usr/local/include
以下为标题).这将在系统范围内安装库,可能是最简单的解决方案,因为这样您就可以在不采取任何额外步骤的情况下根据库进行构建.不要直接在/usr
下安装库,因为这会干扰发行版的打包系统.
- 在项目目录下,就像在Windows下一样.这样做的好处是不需要根访问,也不需要进行系统范围的更改,但您必须更新项目的包含路径和库路径,并且必须将任何共享库文件放在dynamic linker可以找到它们的地方(使用
LD_LIBRARY_PATH
或ld.so.conf
-有关更多详细信息,请参阅链接).
How libraries work
看大卫·A·惠勒的优秀Programming Library HOWTO分.我建议你先阅读这篇文章,然后把任何具体的问题作为新的主题发布出来.
How to distribute your program
传统上,Unix/Linux程序不包含其依赖项的副本.而是由最终用户或开发人员自己安装这些依赖项.正如您所说,这可能需要"大量自述",但它有几个优点:
- 开发库可以通过发行版的包管理器进行安装、管理和更新,而不是每个源副本都有自己的一组要跟踪的库.
- 在一个系统上,任何给定库只有一个副本,因此,如果发现安全漏洞,只有一个地方需要更新.(例如,考虑当zlib,一个非常广泛使用的压缩库,发现有security flaw的混乱,因此每个应用程序都包括一个受影响的版本需要更新.)
- 如果你的程序足够受欢迎(并且是开源的,或者至少是免费的),那么各种Linux发行版的软件包维护人员可能会希望将其打包并包含在他们的发行版中.软件包维护人员不喜欢Bundle 的库.例如,见Fedora's page on the topic.
如果您将程序分发给终端用户,您可能需要考虑提供一个包(.dpkg
或.rpm
),它们可以简单地下载和安装而不必使用源.理想情况下,从最终用户的Angular 来看,软件包将被添加到发行版的存储库(如果它是开源的或至少是免费提供的),这样用户就可以使用他们的软件包管理器(apt-get
或yum
)下载它.这一切都会变得复杂,因为有大量的Linux发行版,但与Debian/Ubuntu兼容的.dpkg
和与Red Hat/CentOS/Fedora兼容的.rpm
应该能覆盖相当比例的最终用户.构建软件包并不难,网上也有很好的指南.