我该如何在g++中包含库的路径?

143

我正在尝试在我的 makefile 中包含额外库的路径,但我无法弄清楚如何让编译器使用该路径。到目前为止,我有:

g++ -g -Wall testing.cpp fileparameters.cpp main.cpp -o test

我想要包含路径到

/data[...]/lib

因为 testing.cpp 包含了来自该库的文件。此外,我在 Linux 机器上运行。

编辑:这不是一个指向库的路径,而只是包含在其中的头文件。我的错误。


1
可能是重复的问题:如何让g++在特定目录中搜索头文件? - phuclv
3个回答

249

要指定一个用于搜索(二进制)库的目录,只需使用-L

-L/data[...]/lib

要指定实际的库名称,您需要使用-l

-lfoo  # (links libfoo.a or libfoo.so)

要指定一个目录以搜索包含文件(不同于库!),您需要使用-I

-I/data[...]/lib

所以,我认为你想要的是这样的:

g++ -g -Wall -I/data[...]/lib testing.cpp fileparameters.cpp main.cpp -o test

这些编译器标志(以及其他一些)也可以在GNU GCC命令选项手册中找到:


5
基本上是在需要之前的某个地方;例如,在.cpp文件名之前应该加上-I - Ernest Friedman-Hill
7
@Fred,是的,g++理解一系列环境变量,可用于控制包含路径、库路径等。 - Ernest Friedman-Hill
1
-L和-I(大写的i,不是小写的L)有什么区别? - Youda008
1
@Youda008 大写字母 L:库搜索路径。大写字母 I:头文件搜索路径。小写字母 l:链接库的名称。 - Ernest Friedman-Hill
1
@ZuzooVn 做什么?-L 和 -l 标志只需放在 LDFLAGS 变量中即可。 - Ernest Friedman-Hill
显示剩余7条评论

7

在你的MakeFile或CMakeLists.txt文件中,你可以按以下方式设置CMAKE_CXX_FLAGS:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/path/to/your/folder")

3

或者您可以设置环境变量。 假设您正在使用 bash,那么在 ~/.bashrc 中,写入以下内容:

C_INCLUDE_PATH="/data/.../lib/:$C_INCLUDE_PATH" ## for C compiler
CPLUS_INCLUDE_PATH="/data/.../lib/:$CPLUS_INCLUDE_PATH" ## for Cpp compiler
export C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH

并使用source ~/.bashrc命令进行源码控制。 这样你就可以顺利进行操作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接