我想使用文件gmp.h
中的头文件mpfr.h
和/opt/local/include
中的函数。
但是当我使用gcc
运行-v
时,所有搜索路径都类似于/Application/Xcode.app/Contents/etc
。
我尝试将LD_LIBRARY_PATH="/opt/local/include"
添加到.bash_profile
,但它不起作用。编译器会告诉我'gmp.h' file not found
或Undefined symbols for architecture x86_64
。
我该怎么办?
答案 0 :(得分:1)
将评论转换为答案。
您需要添加-I/opt/local/include
来编译命令(以指定标题的位置)和-L/opt/local/lib
以及-lgmp
和-lmpfr
(可能以相反的顺序 - MPFR之前GMP)链接命令。
有效!你介意解释一下这背后的逻辑吗?例如,如果我需要另一个头文件
header.h
,我应该如何包含它?
您将其包含在#include "header.h"
中。您使用-I/directory/containing/header
编译代码以查找标头。您可以使用libheader.a
和libheader.dylib
指定库(-L/directory/containing/lib
或-lheader
,因为您似乎位于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 ...)之外,相同的原则适用于其他系统也是如此。
这可能是重复的。