8

尴尬的基本问题。 sudo apt-get install libmemcached6- .h 和 .o 或 .so 在 Linux 机器 (Ubuntu) 上的典型安装中位于何处?而且,我如何确保 g++ 可以接收它们?

4

3 回答 3

18

他们去 /usr/include 和 /usr/lib。如果您使用 -l 选项(用于库),它应该从这些标准位置找到它们。如果你包括使用<file.h>它也应该从正确的地方得到它。

于 2012-05-24T00:00:06.243 回答
13

在 Ubuntu(和其他 Debian 变体)上,您可以使用该dpkg命令进行查找。例如:

$ dpkg -L libxml2
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libxml2
/usr/share/doc/libxml2/AUTHORS
/usr/share/doc/libxml2/NEWS.gz
/usr/share/doc/libxml2/TODO.gz
/usr/share/doc/libxml2/copyright
/usr/share/doc/libxml2/README
/usr/share/doc/libxml2/changelog.Debian.gz
/usr/share/doc/libxml2/README.Debian
/usr/lib
/usr/lib/libxml2.so.2.7.8
/usr/lib/libxml2.so.2

如您所见,Debian 软件包通常不包含这些.h文件。这些通常在相应的-dev包中。所以你可以在这里找到头文件:

$ dpkg -L libxml2-dev
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libxml2-dev
/usr/share/doc/libxml2-dev/AUTHORS
/usr/share/doc/libxml2-dev/NEWS.gz
/usr/share/doc/libxml2-dev/TODO.gz
/usr/share/doc/libxml2-dev/copyright
/usr/share/doc/libxml2-dev/README
/usr/share/doc/libxml2-dev/changelog.Debian.gz
/usr/share/aclocal
/usr/share/aclocal/libxml2.m4
/usr/share/man
/usr/share/man/man3
/usr/share/man/man3/libxml.3.gz
/usr/share/man/man1
/usr/share/man/man1/xml2-config.1.gz
/usr/include
/usr/include/libxml2
/usr/include/libxml2/libxml
/usr/include/libxml2/libxml/HTMLtree.h
/usr/include/libxml2/libxml/tree.h
/usr/include/libxml2/libxml/xmlreader.h
/usr/include/libxml2/libxml/xmlschemastypes.h
...

至于gcc手册解释了它如何搜索头文件。请注意,这与使用-l来指示链接器链接到某个库是不同的并且是分开的。

于 2012-05-24T00:10:02.990 回答
1

在 Linux 和大多数基于 Unix 的系统上,可以在以下两个位置之一找到库:

  1. /usr/lib/
  2. /usr/local/lib/

这两个位置的区别在于后者用于第三方库。因此,如果您已经发布了自己的库或从第三方存储库(例如 ppa)安装了一个库,那么这些文件应该转到/usr/local/lib.

头文件的存储可以通过上面的类比来理解。文件夹是:

  1. /usr/包括/
  2. /usr/本地/包括/
于 2017-04-05T07:22:07.077 回答