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

虽然我是Linux新手,但我不是C的新手.我正在使用CMake预编译带有一些第三方组件的跨平台游戏引擎,但我对使用库有很多疑问.我的问题是如何使用第三方库以及放置它们的位置. Apt在他们的官方位置安装libs(/usr/local,/usr/lib / ..)但我在Windows中使用本地libs开发,这些库位于我的项目目录中的文件夹中.

另外,我需要一个很好的教程来了解库的工作原理.例如:当试图编译我的项目时,luabind要求liblua.s0.1,但是AFAIK没有办法用Lua提供的源生成这个库(至少做make,make install).

我知道,这个问题很模糊,但我没有足够的经验来更简洁.

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

解决方法:

在哪里放库

最好的解决方案是使用Linux发行版的打包系统(apt-get,yum或类似系统)尽可能从发行版提供的软件包中安装库.

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

> /usr/local(/usr/local/lib下的库,/usr/local/include下的头文件).这可以安装系统范围内的库,这可能是最简单的解决方案,因为您应该能够在不采取任何额外步骤的情况下构建它们.不要直接在/ usr下安装库,因为这会干扰您的发行版的打包系统.
>在项目目录下,就像在Windows下一样.这样做的好处是不需要root访问权限,也不需要进行系统范围的更改,但是您必须更新项目的包含路径和库路径,并且必须将任何共享库文件放在dynamic linker可以找到它们的位置(使用LD_LIBRARY_PATH或ld.so.conf – 有关详细信息,请参阅链接.

图书馆如何运作

请参阅David A. Wheeler的优秀Programming Library HOWTO.我建议阅读,然后将任何具体问题作为新主题发布.

如何分发您的程序

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

>可以通过发行版的软件包管理器安装,管理和更新开发库,而不是每个源副本都有自己的一组库来跟踪.
>系统上只有一个给定库的副本,因此只有一个地方需要更新,例如,如果发现安全漏洞. (例如,考虑到zlib(一种使用非常广泛的压缩库)被发现具有security flaw时产生的混乱,因此需要更新包含受影响版本的每个应用程序.)
>如果您的程序足够流行(并且是开源的或至少是免费的),那么各种Linux发行版的程序包维护者可能希望打包它并将其包含在它们的发行版中.包维护者真的不喜欢捆绑的库.例如,参见Fedora’s page on the topic.

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

上一篇:cannot resolve symbol 'Servlet'


下一篇:Android Studio Youtube导入问题. ‘YouTubePlayerSupportFragment无法解析’