Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.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
如何将.h和.o文件添加到gcc_C_Gcc_Header Files_Object Files - Fatal编程技术网

如何将.h和.o文件添加到gcc

如何将.h和.o文件添加到gcc,c,gcc,header-files,object-files,C,Gcc,Header Files,Object Files,我正试图找出如何将头文件和对象文件添加到标准库中,以便可以像标准库一样轻松地使用自定义文件 目前,我必须在.c文件中键入头文件的路径,然后在编译时链接目标文件路径 我想补充一下: #include <mystdlib.h> #包括 也不用像我引用stdio.h头文件时那样担心链接对象文件 我四处搜索过,但我担心我没有使用正确的术语,因为我似乎没有找到我需要的结果。我是第一个想这样做的人,还是根本不可能,因此人们甚至不去尝试?gcc使用环境变量C\u INCLUDE\u PATH和

我正试图找出如何将头文件和对象文件添加到标准库中,以便可以像标准库一样轻松地使用自定义文件

目前,我必须在.c文件中键入头文件的路径,然后在编译时链接目标文件路径

我想补充一下:

#include <mystdlib.h>
#包括
也不用像我引用stdio.h头文件时那样担心链接对象文件


我四处搜索过,但我担心我没有使用正确的术语,因为我似乎没有找到我需要的结果。我是第一个想这样做的人,还是根本不可能,因此人们甚至不去尝试?

gcc
使用环境变量
C\u INCLUDE\u PATH
LIBRARY\u PATH
来查找头文件和库文件。将它们设置在某个地方(例如,您的
bash\u配置文件)
应该可以实现您所描述的:

export C_INCLUDE_PATH="$HOME/include"
export LIBRARY_PATH="$HOME/lib"
或者,
-I
-L
标志将目录分别添加到要搜索头文件和库文件的目录列表中

编辑:正如下面@ChrisStratton所指出的,需要显式指定库名称或对象文件。顺便说一句,没有办法让gcc总是链接到一个库(比如
libc

来源:


如果头文件与
.c
文件位于同一项目文件夹中,则可以使用:
#包括“mystdlib.h”
如果头文件不在标准位置,也不在当前目录中,则使用“-I”参数指定包含它的目录。例如:
gcc-I/home/mysql/include xx.c-o xx
使用类似的工具将大大简化构建过程。通常情况下,您不希望手动调用gcc,因为编译和链接非平凡项目中的所有内容既耗时又容易出错。@CaptainMurphy适当的生成文件通常很难正确获取。如果他们打算使用
Make
,而不是像cmake或automake(或任何你最喜欢的构建系统)这样的东西,他们仍然需要知道基础知识(或者花一天时间阅读
info gcc
)。如果头文件与源文件位于同一目录中,你可以使用
#包括“header.h”
并且您不需要使用
-I
来告诉编译器在哪里可以找到它。如果它不在同一目录中,请使用makefile(我不同意上面的评论,简单的makefiles非常简单,例如,只要
CPPFLAGS=-I~/path/to/headers
是一个有效的makefile),这将负责搜索,但实现该功能的库名称或对象文件仍需明确指定。除了导出库路径以允许可执行文件加载自定义库之外,您还可以指定将包含在可执行文件本身中的
rpath
(例如
-Wl,-rpath=/PATH/to/your/lib
)注意,这意味着您的库必须位于其他系统上的同一位置,您的可执行文件才能在其他框上运行。@ChrisStratton谢谢!我已将你的评论纳入了答案中。我很好奇是否有可能让gcc自动链接到某个东西。@DavidC.Rankin很好。对于动态库,
rpath
可以用来代替
LD\u LIBRARY\u PATH
,但是
LIBRARY\u PATH
必须设置为任意一种方式()@MBlanc,我不知道你说的
LIBRARY\u PATH
是什么意思。。。大多数人使用
-L
,根本不使用
库路径。