【问题标题】:How to add .h and .o files to gcc如何将 .h 和 .o 文件添加到 gcc
【发布时间】:2015-01-20 22:56:02
【问题描述】:

我正在尝试弄清楚如何将头文件和目标文件添加到标准库中,以便我可以像使用标准库一样简单地使用我的自定义文件。

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

我希望能够添加:

#include <mystdlib.h>

不用担心像引用 stdio.h 头文件时那样链接目标文件。

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

【问题讨论】:

  • 如果你的头文件和.c文件在同一个项目文件夹中,你可以使用:#include "mystdlib.h"
  • 如果标题不在标准位置,也不在当前目录中,则使用“-I”参数指定包含它的目录。例如:gcc -I/home/mysql/include xx.c -o xx
  • 使用像gnu.org/software/make 这样的工具将大大简化您的构建过程。通常,您不想手动调用 gcc,因为编译和链接非平凡项目中的所有内容既费时又容易出错。
  • @CaptainMurphy 众所周知,正确的 makefile 通常很难正确处理。如果他们要使用 Make 而不是 cmake 或 automake 之类的东西(或任何你最喜欢的构建系统),他们仍然需要了解基础知识(或者只是花一天时间阅读 info gcc)。
  • 如果头文件和你的源文件在同一个目录下你可以使用#include "header.h"并且你不需要使用-I告诉编译器在哪里找到它。如果不在同一个目录中,请使用makefile(我不同意上面的评论,简单的makefile非常简单,例如CPPFLAGS = -I ~/path/to/headers是一个有效的makefile)

标签: c gcc header-files object-files


【解决方案1】:

gcc 使用环境变量C_INCLUDE_PATHLIBRARY_PATH 来查找头文件和库文件。将它们设置在某处(例如,您的 bash_profile) 应该实现您所描述的:

export C_INCLUDE_PATH="$HOME/include"
export LIBRARY_PATH="$HOME/lib"

或者,-I-L 标志分别将目录添加到要搜索头文件和库文件的目录列表中。

编辑: 正如下面@ChrisStratton 所指出的,需要明确指定库名称或目标文件。 AFAIK,没有办法让 gcc 总是链接到一个库(比如libc)。

来源:

https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html

【讨论】:

  • 这将负责搜索,但仍需明确指定实现该功能的库名称或目标文件。
  • 导出 LIBRARY_PATH 允许可执行文件加载您的自定义库的替代方法,您还可以指定将包含在可执行文件本身中的rpath(例如-Wl,-rpath=/path/to/your/lib)注意,这意味着您的库您的可执行文件必须在其他系统上的相同位置才能在其他机器上运行。
  • @ChrisStratton 谢谢!我已将您的评论纳入答案。我很好奇是否可以让 gcc 自动链接到某些东西。
  • @DavidC.Rankin 好点。对于动态库,rpath 可以用来代替LD_LIBRARY_PATH,但LIBRARY_PATH 必须设置为任一方式(stackoverflow.com/questions/4250624/…
  • @MBlanc,我不知道你对LIBRARY_PATH 的意思是什么必须设置...大多数人使用-L 而不要使用LIBRARY_PATH完全没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2023-03-08
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多