在 linux 上使用 C++ 库

Using c++ library on linux

我是 c++ 的新手,不明白如何在 Linux (Mint) 上安装库。我想使用 GNU GMP 库:https://en.wikipedia.org/wiki/GNU_Multiple_Precision_Arithmetic_Library 我下载了 tar.lz 文件并使用

安装了它
./configure
make
sudo make install

如果我尝试编译它,我会收到错误消息,指出找不到头文件 "gmpxx.h"。我在哪里可以找到这个文件?如何使用 -lgmpxx -lgmp 标志编译它?我试过类似的东西:

g++ test.cpp -o test -lgmpxx -lgmp

如果图书馆正在使用 Autoconf 系统(您使用的系统),则默认安装前缀为 /usr/local.

这意味着库安装在 /usr/local/lib 中,头文件安装在 /usr/local/include 中。不幸的是,很少有 Linux 系统默认为编译器添加搜索功能,您需要明确告诉编译器这样做。

告诉编译器添加头文件路径是使用 -I(大写 i)选项完成的。对于库,选项是 -L.

像这样:

g++ test.cpp -I/usr/local/include -L/usr/local/lib -lgmpxx -lgmp

上述命令将允许您构建程序,但不幸的是,这还不够,因为您很可能无法 运行 刚构建的程序。那是因为 运行-time 链接器和程序加载器也不知道(动态)库的路径。您需要添加另一个特定于链接器的标志 -rpath 告诉构建时链接器将路径嵌入到您完成的程序中。前端程序g++不知道这个选项,所以你需要使用-Wl,-rpath:

g++ test.cpp -I/usr/local/include -L/usr/local/lib -lgmpxx -lgmp -Wl,-rpath=/usr/local/lib

可以在 the GCC documentation (for the -I and -L and -Wl options), and the documentation for ld (the compile-time linker) 中找到 -rpath 选项的选项。


如果您安装了很多自定义构建库,您可以将路径 /usr/local/lib 添加到文件 /etc/ld.so.conf,然后 运行 ldconfig 命令(如root)。那么你不需要 -rpath 选项。


综上所述,几乎 所有 您通常用于开发的库都将在您的发行版标准存储库中可用。如果您使用它们,库将安装路径,这意味着您不必添加标志。

所以我建议您改为安装库的发行版开发包。