Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCC-添加库_C_Gcc - Fatal编程技术网

GCC-添加库

GCC-添加库,c,gcc,C,Gcc,我想使用头文件gmp.h和mpfr.h中的函数,它们位于文件/opt/local/include中 但是当我使用-v运行gcc时,所有的搜索路径都类似于/Application/Xcode.app/Contents/etc 我已尝试将LD\u LIBRARY\u PATH=“/opt/local/include”添加到.bash\u profile中,但不起作用。编译器要么告诉我未找到'gmp.h'文件,要么告诉我架构x86\u 64的未定义符号 我该怎么办?将评论转换为答案 您需要添加-I/o

我想使用头文件
gmp.h
mpfr.h
中的函数,它们位于文件
/opt/local/include

但是当我使用
-v
运行
gcc
时,所有的搜索路径都类似于
/Application/Xcode.app/Contents/etc

我已尝试将
LD\u LIBRARY\u PATH=“/opt/local/include”
添加到
.bash\u profile
中,但不起作用。编译器要么告诉我未找到
'gmp.h'文件
,要么告诉我架构x86\u 64的
未定义符号

我该怎么办?

将评论转换为答案


您需要添加
-I/opt/local/include
来编译命令(指定标题的位置)和
-L/opt/local/lib
-lgmp
-lmpfr
(可能以相反顺序-GMP之前的MPFR)来链接命令

真管用!你能解释一下这背后的逻辑吗?例如,如果我需要另一个头文件
header.h
,我应该如何包含它

您可以将其包含在
#包含“header.h”
中。您可以使用
-I/directory/containing/header
编译代码以查找头。您也可以使用
-L/directory/containing/lib
-lheader
-或任何适当的工具来指定库(
libheader.a
libheader.dylib
,因为您似乎在macOS上)的位置

  • -I
    告诉预处理器在指定目录中查找头文件,因此它会查找
    /directory/containing/header/header.h

  • -L
    告诉链接器在哪里可以找到库(因此它会查找
    /directory/containing/lib/libheader.dylib
    等)

  • -lheader
    告诉链接器查找库的
    libheader.a
    libheader.dylib
    (或本地等效项)

除了使用
.dylib
vs
.so
vs
.dll
vs…(和
.a
vs
.lib
vs…)之外,同样的原则也适用于其他系统


这可能是重复的。

LD\u LIBRARY\u路径不适用于包含文件。好的,那么正确的方法是什么?我浏览的每一页似乎都告诉我一件不同的事情。我还尝试添加C_INCLUDE_路径,但它不起作用。您需要添加
-I/opt/local/INCLUDE
来编译命令(指定标题的位置)和
-L/opt/local/lib
-lgmp
-lmpfr
(可能与GMP之前的MPFR顺序相反)来链接命令。这很有效!!!非常感谢你。你能解释一下这背后的逻辑吗?例如,如果我需要另一个头文件header.h,我应该如何包含它?您可以使用
#include“header.h”
包含它。您可以使用
-I/directory/containing/header
编译代码以查找头。您也可以使用
-L/directory/containing/lib
-lheader
-或任何适当的工具来指定库(
libheader.a
libheader.dylib
,因为您似乎在macOS上)的位置。
-I
告诉预处理器在指定目录中查找头文件(例如,它查找
/directory/containing/header/header.h
)。
-L
告诉链接器在哪里可以找到库(因此它会查找
/directory/containing/lib/libheader.dylib
等)。