在写头文件的时候,将结构体定义在头文件中
#include <linux/elf.h>
#include <stdint.h>
...
struct ELF_FILE {
ELF_Addr base_address;
ELF_Ehdr *elf_ehdr;
ELF_Shdr *elf_shdr;
ELF_Phdr *elf_phdr;
...
};
而在编译的时候,报出很多问题:
included multiple times, additional include site here
redefinition of 'ELF_FILE'
但是在检查后发现,并没有出现include
多次头文件,也只有这一个定义ELF_FILE
结构体的地方
在使用#include <xxx.h>
的时候,编译器会在预处理阶段,将头文件以及定义的宏铺开在所使用的C文件中。
如果没有使用条件编译的话,如果出现重复引用,以及循环递归使用include
的时候,就会在对应的C文件中展开重复定义的代码。
加入条件编译,在头文件的头和尾加上条件编译即可
#ifndef SOTEST_ELF_HOOK_H
#define SOTEST_ELF_TYPE_DEF_H
#include <linux/elf.h>
#include <stdint.h>
...
struct ELF_FILE {
ELF_Addr base_address;
ELF_Ehdr *elf_ehdr;
ELF_Shdr *elf_shdr;
ELF_Phdr *elf_phdr;
...
};
#endif //SOTEST_ELF_TYPE_DEF_H