关于图书馆的一些疑问

时间:2016-03-12 15:09:25

标签: c++ linux libraries

说,我想用Linux编写一个用C ++编写的程序,我需要一些特定的库。有两种获取这些库的方法:

  1. 使用命令行 - > apt-get安装库
  2. 从他们的网站下载并解压缩.zip或.tar文件。
  3. 现在我的问题是:

    对于第一种方法,我看到使用apt-get安装库和apt-get install library-dev下载库。我知道dev意味着开发或开发人员,但安装dev和不安装dev有什么区别?开发者究竟做了什么?

    对于第二种方法,我是否需要使用编译器构建库?因为我已经看过教程,但是使用的操作系统通常是Windows,我只需要在Windows而不是Linux上构建它们吗?

    另外,我只能对某个库使用第二种方法而不是第一种方法。提取后,我该怎么办?是否有手动安装库的默认方式或每个库是否不同?

    最后,当我使用第一个方法安装库时?是/ usr / local / lib,/ usr / lib还是/ usr / include?因为当我必须在链接器的设置中链接到这些库时,我只写他们的名字,而不是路径,所以我假设已经有一个库的默认路径。

    最后一个问题:是否有任何默认的安装和使用库的方式,或者这取决于我想做什么,编程语言等......?

1 个答案:

答案 0 :(得分:1)

第二种方法非常广泛,因为它完全取决于项目的设计方式,包括使用的构建系统等。当您使用分发的托管包时,事情变得更加符合。

如果要开发使用该库的程序,则需要library-dev包,该包通常包含C/C++/etc..头文件。

许多开发包符合标准工具,可帮助构建系统查找库头文件和二进制文件。

例如libcurl使用pkg-config系统,因此可以从命令行找到其编译器组件,如下所示:

pkg-config libcurl --libs # print the library link flags

然后,您可以将其添加到Makefile(或您使用的任何构建系统):​​

program:
     g++ -o program program.cpp $(shell pkg-config libcurl --libs)

$(shell pkg-config libcurl --libs)部分添加了正确的编译器标志以与库链接。

并非所有开发包装都使用pkg-config。有些人带有他们自己的工具(比如mysql_config),而有些人会让你猜测并尝试自己解决这个问题(看着你libclang)。