我不是C++的新手,尽管我是Linux新手.我正在使用CMake与一些第三方预编译一个跨平台的游戏引擎,但我对使用库有很多疑问.我的问题是如何与第三方图书馆合作.在哪里放这个库.Apt在他们的官方位置安装libs(/ usr/local,/ usr/lib/..)但我使用本地库中的本地库在我的项目目录中开发.
另外,我需要一个很好的教程来了解库的工作原理.例如:当试图编译我的项目时,luabind通过liblua.s0.1询问,但是AFAIK没有办法用lua提供的源生成这个库(至少做make,make install).
我知道,这个问题很模糊,但我没有足够的经验来更简洁.
更新:阅读sombe答案后,更简洁的问题如下.如果我安装所有第三方库,我该如何分发我的程序?如何在不使用大型自述文件的情况下管理家属?
感谢所有强文
在哪里放库
最好的解决办法是使用Linux发布版的包装系统(apt-get
,yum
或类似)从发行版提供的软件包安装库尽可能.
如果发行版的打包库不是最新的版本,或者您需要一些非标准的构建选项,或者您需要一个发行版不提供的库,那么您可以自己构建和安装它.您有两个主要选项来放置库:
/usr/local
(下面的库/usr/local/lib
,标题下/usr/local/include
).这可以安装系统范围内的库,这可能是最简单的解决方案,因为您应该能够在不采取任何额外步骤的情况下构建它们.不要直接安装库/usr
,因为这会干扰您的发行版的打包系统.
在您的项目目录下,就像在Windows下一样.这样做的好处是不需要root访问权限而不进行系统范围的更改,但是您必须更新项目的包含路径和库路径,并且您必须将任何共享库文件放在动态链接器可以找到它们的位置(使用LD_LIBRARY_PATH
或ld.so.conf
- 请参阅链接了解更多详情).
图书馆如何运作
请参阅David A. Wheeler的优秀编程库HOWTO.我建议阅读,然后将任何具体问题作为新主题发布.
如何分发您的程序
传统上,Unix/Linux程序不包含其依赖项的副本.而是由最终用户或开发人员自己安装这些依赖项.如你所说,这可能需要"大型自述文件",但它有一些优点:
可以通过发行版的软件包管理器安装,管理和更新开发库,而不是每个源副本都有自己的一组库来跟踪.
系统上只有一个给定库的副本,因此只有一个地方需要更新,例如,如果发现安全漏洞.(例如,考虑当zlib(一种使用非常广泛的压缩库)被发现存在安全漏洞时产生的混乱,因此需要更新包含受影响版本的每个应用程序.)
如果您的程序足够流行(并且是开源的或至少是免费的),那么各种Linux发行版的软件包维护者可能希望打包它并将其包含在它们的发行版中.包维护者真的不喜欢捆绑的库.例如,请参阅Fedora关于该主题的页面.
如果您要将程序分发给最终用户,您可能需要考虑提供一个可以简单地下载和安装的软件包(.dpkg
或.rpm
),而无需使用源代码.理想情况下,从最终用户的角度来看,包将被添加到发行版的存储库(如果它是开源的或至少是免费的),以便用户可以使用他们的包管理器(apt-get
或yum
)下载它.这可能都变得复杂,因为有大量的Linux发行版,但Debian/Ubuntu兼容.dpkg
和Red Hat/CentOS/Fedora兼容.rpm
应覆盖很大比例的最终用户.构建包不是太难,并且有很好的在线方式.