我收到以下错误消息,我检查了文件,但无法弄清楚为什么或如何解决错误。请帮忙。
arch/arm/mach-msm/jtag-mm.o: In function `dbg_init_arch_data':
/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag-mm.c:279: multiple definition of `msm_jtag_save_cntr'
arch/arm/mach-msm/jtag.o:/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag.c:1085: first defined here
arch/arm/mach-msm/jtag-mm.o: In function `etm_init_arch_data':
/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag-mm.c:568: multiple definition of `msm_jtag_save_state'
arch/arm/mach-msm/jtag.o:/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag.c:1038: first defined here
arch/arm/mach-msm/jtag-mm.o: In function `msm_jtag_restore_state':
/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag-mm.c:585: multiple definition of `msm_jtag_restore_state'
arch/arm/mach-msm/jtag.o:/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag.c:1073: first defined here
arch/arm/mach-msm/jtag-mm.o: In function `dbg_init_arch_data':
/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag-mm.c:279: multiple definition of `msm_jtag_restore_cntr'
arch/arm/mach-msm/jtag.o:/home/sansari/WORKING_DIRECTORY/arch/arm/mach-msm/jtag.c:1085: first defined here
make[1]: *** [arch/arm/mach-msm/built-in.o] Error 1
处放了一份jtag-mm.c
感谢。这是jtag.c
在注释掉jtag.h并重新编译后,我收到以下错误消息:
arch/arm/mach-msm/jtag-mm.c:790:2: error: implicit declaration of function 'msm_jtag_fuse_apps_access_disabled' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[1]: *** [arch/arm/mach-msm/jtag-mm.o] Error 1
make: *** [arch/arm/mach-msm] Error 2
@Peter - 谢谢。我明白你在说什么。好。让我试一试没关系grep评论:-)我认为这是不可能的。
更新:谢谢。我现在可以看到问题所在。现在我已经发布了jtag.h,jtag-mm.c和jtag.c,你可以验证我认为的问题。正如Peter所说,变量被声明两次。一次通过jtag.c再次通过jtag-mm.c。例如,我看到了这些行:
uint32_t msm_jtag_save_cntr[NR_CPUS];
uint32_t msm_jtag_restore_cntr[NR_CPUS];
在两个文件中。但我试图在一个文件中将它们注释掉,并且因为变量在函数中的同一文件中使用而出现错误。那么处理这个的正确方法是什么?我可以在头文件中声明一次,只是从两个源文件中删除它吗?或者我应该将减速度保留在一个源文件中,并将其包含在另一个源文件中?
Here是jtag.h的副本 感谢
答案 0 :(得分:0)
您尚未显示jtag.h文件,因此只能推测它正在做什么。
由于大多数错误在“注释掉jtag.h”时消失,最可能的解释是头文件有定义,其中一个源文件不止一次#include
该头文件(直接或 - 更可能 - 间接,由于其他头文件#include
。一个常见的解决方案是将包含保护添加到表单
#ifndef SOME_MACRO_CHOSEN_TO_BE_UNIQUE_TO_THE_HEADER
#define SOME_MACRO_CHOSEN_TO_BE_UNIQUE_TO_THE_HEADER
/* the content of the header file
#endif
您也可以(在修复上述内容之后,编译器停止对您的代码进行阻塞)获取链接器错误。这将来自多个源文件#include
您的标头 - 因此链接器会看到多个目标文件中定义的符号。该解决方案的解决方案是将头文件中的违规定义(通常是函数或静态变量)移动到项目中的一个(并且只有一个)源文件。