Linux 头文件中如何避免冲突?

法新社_555

我试图了解 Linux 的工作原理以及如何构建模块。

到目前为止,我看到 Linux 头文件存储/usr/include/usr/lib/x86_64-linux-gnu. 我有几个问题:

  1. Linux 或任何 C 程序如何知道在哪里查找头文件和 .so 文件?有没有定义这个的文件?如果我想添加另一个默认源或标题文件夹(只是为了骑马),是否可以修改这些引用?

  2. 如何避免冲突?例如,在libprocps-dev有一个/usr/include/proc/numa.h定义为void numa_uninit (void);. 该文件的实现在/usr/lib/x86_64-linux-gnu/libprocps.so. 如果有人还编译了另一个具有相同函数定义但具有另一个实现(或代码)的 .so 文件并将其添加到/usr/lib/x86_64-linux-gnu. 链接器如何知道哪个是正确的 .so 文件必须链接到该标头定义?

谢谢。

斯蒂芬·基特

我试图了解 Linux 的工作原理以及如何构建模块。

构建内核模块不涉及“标准”C 编译器目录;相反,请参阅/lib/modules/$(uname -r)/build

  1. C程序不知道去哪里寻找头文件和库;C 预处理器和编译器做。您可以使用以下命令查看标准包含目录

    gcc -xc -E -v - < /dev/null
    

    (替换-xc-xc++用于C ++),以及使用该库搜索目录

    gcc -print-search-dirs
    
  2. 编译器不会避免冲突;这取决于运行编译器的任何人或任何人,以确保搜索路径不包含冲突的标头。库不会自动链接,您必须将库添加到链接器命令行(-lprocps在您的示例中);任何其他库都将被忽略。在这两种情况下,当发生冲突时,编译和/或链接会因错误而停止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不同的Linux发行版上处理不同的头文件位置?

如何在Linux中找到C编程语言的头文件?

如何避免由于Linux中的信号而导致睡眠呼叫中断?

如何避免Linux的strftime()中过多的stat(/ etc / localtime)调用?

避免在头文件中定义模板

错误:函数类型冲突,函数在头文件中声明

如何避免Linux中已失效的python进程?

我们如何避免Windows和Git中的Linux用户之间的文件命名冲突?

如何解决头文件中的变量冲突?

如何避免在Youcompleteme中完成后自动添加头文件

避免针对不同Linux版本的bazel-remote-cache冲突

如何获得Linux内核的bpf_helpers.h头文件?

在Linux中复制文件,如果目标中确实存在文件,则避免复制

Linux内核头文件以匹配当前内核

/ usr / include中的头文件从哪里来?Linux内核代码或Gcc

Linux头文件中的__VMKLNX__是什么?

在Unix / Linux(Ubuntu)中编译头文件和两个.cpp文件

如何避免重新编译头文件

#define与.dll头文件中的变量冲突

当Linux Kernel Source移动文件系统头文件时?

在Linux内核中找不到某些“ asm”,“生成的”头文件的来源?

Linux内核升级后安装匹配的Linux头文件

树莓派 3 的 linux 头文件

缺少linux内核头文件

无法安装 Linux 头文件 (5.5.1)

如何安装 Linux 头文件?

如何在 Linux 上找到 Qt 包含头文件的位置

如何避免在 Linux 上创建 tmp 文件?

在arch linux中编译c代码时找不到GTK头文件