【问题标题】:Using c++ library on linux [duplicate]在linux上使用c ++库[重复]
【发布时间】:2018-07-23 06:07:42
【问题描述】:

我是 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

【问题讨论】:

  • 在 linux 上,对于大多数软件,你不应该使用 configure/make/make install 自己构建它,你应该使用你的包管理器并告诉它你想要 libgmp-dev。

标签: c++ libraries flags


【解决方案1】:

如果库使用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

上述命令将允许您构建程序,但不幸的是这还不够,因为您很可能无法运行刚刚构建的程序。那是因为运行时链接器和程序加载器也不知道(动态)库的路径。您需要添加另一个特定于链接器的标志-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 中找到(对于-I-L-Wl 选项),the documentation for ld (the compile-time linker) 对于-rpath 选项。


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


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

因此,我建议您改为安装库的发行版开发包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2016-12-30
    • 2020-12-14
    • 2019-10-24
    • 2017-03-12
    相关资源
    最近更新 更多