问一下,为啥代码在RedHat里面gcc编译出错,提示找不到module.h等头文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问一下,为啥代码在RedHat里面gcc编译出错,提示找不到module.h等头文件相关的知识,希望对你有一定的参考价值。

在网上拷贝了一些关于linux钩子的函数使用,问一下,为什么代码在RedHat里面gcc编译出错,提示找不到module.h等头文件,然后我下了3.2.6的内核解压出来把module.h拷到usr/include/linux目录下但是出了一大堆关于头文件内部的问题,,怎么解决啊
今天我在虚拟机里查看了我的linux 内核版本是2.6.18的
然后我下下来拷贝到/usr/src 里面
源代码里面是这样的
#include </linux/module.h>
......

我在编译的时候是这样的
gcc -l /usr/src/include -o test.c
在 /usr/src/include/linux目录下面明明有module.h这个文件,但为什么他总是说不存在呢
我使用find /usr/src/include/linux module.h
他也提示没有,但是明明有嘛。。。。

你拷贝到/usr/include/linux的module.h先删除了,根本不是在这个目录
你需要首先安装对应内核版本的头文件,不是随便一个版本就可以~一般情况下内核头文件放在/usr/src/下面。
你这个钩子函数一看就知道是运行在内核空间的,以模块的方式安装使用的,不是你直接就可以用gcc安装的~最简单的办法是用makefifle,具体操作你找下如何编译内核模块或者看下源码自带的说明文档。

PS:你是全部都拷贝进去了吗?这个.h本身会有很多其他的引用.
另外,这个编译时我上面说了用makefile来做,你看下这里:
http://zhidao.baidu.com/question/262194193.html
参考技术A 我的也是这样啊 搞了几天,试了各种办法都木有用,楼主搞定了吗,可以告诉下解决办法不 参考技术B btw, find 的提示你看了么??? 用法不对啊~~~~ 参考技术C 从源程序开始检查程序是否有不能执行的编译

当其他编译器没有时,MinGW gcc 会出错

【中文标题】当其他编译器没有时,MinGW gcc 会出错【英文标题】:MinGW gcc gives errors when other compilers do not 【发布时间】:2016-10-27 23:34:48 【问题描述】:

在你问之前,是的,我已经查了好几天了。我完全卡住了...我正在使用 MINGW32(我的快捷方式是 MSYS)来编译我的 c 和 cpp 代码。大约 2 或 3 天以来,我一直收到奇怪的错误。 (下)它以前工作得很好。我什至运行了我之前编译的相同代码,它给出了相同的错误。然后我进入 DevC++ 并打开然后编译它就可以了。

错误:

命名空间:找不到命令

使用:找不到命令

语法错误: int main()

(有时它会给我带来难以理解的混乱)

我真的卡住了...我不想切换到 DevC++...我喜欢使用自己的文本编辑器并在命令行中编译。

【问题讨论】:

抱歉,这是我第一次在这样的帖子上发帖。我在这里阅读了很多对我有帮助的东西,所以我决定问... 请张贴“无法阅读的大烂摊子”。以及您的实际程序。如果没有看到该程序,不确定我们将如何帮助您。 我打赌你运行的是 gcc 而不是 g++。另外,这个问题与 IDE 无关,所以你关于 DevC++ 的观点毫无意义。 发布最简单的可能导致错误的完整程序 “找不到命令”错误表明您实际上是在尝试将 C++ 程序作为 shell 脚本运行。如果这不是正在发生的事情(或者如果这不能帮助您弄清楚发生了什么),请将您正在编译的代码缩减为一个仍然显示相同错误的小程序,请将该代码与您的确切命令一起发布 用于编译它和确切的错误消息(使用复制/粘贴)。 【参考方案1】:

根据您的错误 namespace: command not foundusing: command not found 告诉我您没有使用适当的编译器编译代码。

MinGW32 工具链中的参考:

gcc.exe = C

g++.exe = C++

您可能会发现了解 IDE 对您的编译器的实际作用很有用。 我当前的 IDE 允许我查看它为构建我的项目而运行的所有命令:

C:/mingw32/bin/g++.exe  -c  "C:/MyProgram/main.cpp" -g -O0 -std=c++14 -Wall  -o ./Obj/main.cpp.o -I. -IDependencies/Something/include

让我们来看看这是做什么的。

我当前的工具链是 MinGW32,它位于 C:/mingw32/bin/g++.exe

g++ 是我们的 c++ 编译器,因此我们调用 g++.exe 并传递以下开关:

-c "C:/MyProgramm/main.cpp"

这告诉我的编译器从我的项目目录中编译 main.cpp。然后我的 IDE 添加了一些额外的命令行开关。为了回答的目的,我只会考虑-o。这告诉我们将输出文件从我们的代码 main.cpp 转换为一个输出文件。

我们生成这样一个文件的原因是为了节省编译时间,这样我们就不必在不更改文件的情况下编译同一个文件两次。我们对每个文件执行此步骤,创建.o 文件的集合。

然后新文件保存在"C:/MyProgramm/Obj/main.cpp.o"

这意味着你的命令行函数看起来像这样:

C:/mingw32/bin/g++.exe -c "<my project directory>/<file>.cpp" -o ./Obj/<file>.cpp.o

我建议您阅读有关 g++ 函数的文档并从不同的 IDE 中学习,因为您很快就会发现您需要使用编译器做更高级的事情。

例如,要启用 c++14 的功能,我添加 -std=c++14

*已编辑以反映反馈。

【讨论】:

我不知道 任何 C 编译器会产生“找不到命令”错误,因为 C 没有命令。所以我怀疑问题出在将程序提供给 C 编译器。 @rici:C 确实有命令,或者从 C89 开始就有,但出于某种奇怪的原因,没有使用术语。 C 源于 BCPL,其中命令在语法中也称为命令。命令只是一个不是声明的语句。我记得在 C89 中的一个显着区别是,在一个块中,声明必须在命令之前。在 C++ 中,块中允许任何顺序的语句和命令,但 C++ 翻译单元仅是声明序列:在该序列中不允许任何命令(即,您不能在命名空间范围内拥有命令)。 @Cheersandhth.-Alf:我在 C99 或 C11 中找到的“命令”一词的唯一用法是在第 7.22.4.8 节中,它描述了 system() 函数。 (...system 函数将string 指向的字符串传递给要执行的命令处理器...)。 (当前)标准中的语法称为 statements 语句,就像我所使用的 K&R 副本(第 2 版,1988 年)一样。所以我坚持我的声明(或者我的命令,如果你愿意的话:))。 C 派生自 BCPL,但它不是 BCPL。而且我非常怀疑 BCPL 编译器是否会发出“找不到命令”错误。 'command not found' 是错误 OP 指定的错误,因此我使用了相同的术语。我只假设他可能正在使用 C 编译器。无论如何,我怀疑它是 OP 得到的实际错误,而是一个短手。 @avalon:我有理由确定 OP 引用了他得到的实际错误,尽管他们可能在开头缺少 bash:,这肯定会表明错误的根源。试试这个:bash -c "using namespace std;" 看看会产生什么错误信息。

以上是关于问一下,为啥代码在RedHat里面gcc编译出错,提示找不到module.h等头文件的主要内容,如果未能解决你的问题,请参考以下文章

当其他编译器没有时,MinGW gcc 会出错

为啥以下代码在在线 ide(gcc 7.2.0) 上有效,但在 ubuntu 上出错?

redhat9.0如何安装arm-linux-gcc交叉编译器

为啥我在redhat5用./configure编译的时候出现以下报错 :no package 'glib-2.0 ' found

py faster rcnn的lib编译出错问题

为啥使用 Visual Studio 而不是 GCC 编译时没有错误?