Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何解决多定义编译器错误_Android_C_Makefile_Arm_Jtag - Fatal编程技术网

Android 如何解决多定义编译器错误

Android 如何解决多定义编译器错误,android,c,makefile,arm,jtag,Android,C,Makefile,Arm,Jtag,我收到以下错误消息,我检查了文件,但无法找出原因或如何解决错误。请帮忙 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/WOR

我收到以下错误消息,我检查了文件,但无法找出原因或如何解决错误。请帮忙

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.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
@彼得-谢谢。我明白你的意思。好啊让我试试。不要介意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];
在这两个文件中。但我试图在一个文件中注释掉它们,但我得到了一个错误,因为该变量在函数的同一个文件中使用。那么正确的处理方法是什么呢?我可以在头文件中声明一次,然后从两个源文件中删除它吗?或者我应该将减速保留在一个源文件中,并将其包含在另一个源文件中

是jtag.h的副本
谢谢你没有显示jtag.h文件,所以只能推测它在做什么

由于大多数错误在“注释掉jtag.h”时消失,最可能的解释是头文件有定义,其中一个源文件是
\include
多次注释该头文件(直接或更可能是间接地,由于其他头文件
\include
将其注释掉)。一个常见的解决方案是在表单的头文件中添加include-guard

 #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
ing您的头产生-因此链接器会看到多个目标文件中定义的符号。解决这个问题的办法是将有问题的定义(通常是函数或静态变量)从头文件移到项目中的一个源文件中(并且只有一个源文件)。

您没有显示jtag.h文件,因此只能推测它在做什么

由于大多数错误在“注释掉jtag.h”时消失,最可能的解释是头文件有定义,其中一个源文件是
\include
多次注释该头文件(直接或更可能是间接地,由于其他头文件
\include
将其注释掉)。一个常见的解决方案是在表单的头文件中添加include-guard

 #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
ing您的头产生-因此链接器会看到多个目标文件中定义的符号。解决这个问题的方法是将有问题的定义(通常是函数或静态变量)从头文件移到项目中的一个源文件中(并且只有一个源文件)。

我们还需要查看jtag.c的内容。但是,两个.c文件似乎都包含4个在两个文件中具有相同名称的函数。1)大多数/所有函数都声明为“静态”,然后使用“导出\符号”导出一些函数名。一般来说,使“静态”函数全局可见不是一个好主意。2) 许多函数都有“inline”修饰符,但是,这些函数非常大。因此,编译器不会“内联”它们。如果从多个位置调用这些函数,则删除调用/返回序列所节省的微不足道的成本将被淹没。3) 内联函数应该在头文件中,因此多个源可以在文件中内联它们,“内联”函数(我没有全部检查)只调用一次,而且函数很大。因此:1)函数不会“内联”2)内联仅适用于调用多次的非常短的函数2具有重复定义的4个函数中的2个在jtag mm.c文件中。似乎所有4个重复函数都在jtag.c文件中定义/导出。强烈建议为函数使用唯一的名称,也许从jtag#u mm.c文件中删除“#include”行会有所帮助。我们还需要查看jtag.c的内容。但是,两个.c文件似乎都包含4个在两个文件中具有相同名称的函数。1)大多数/所有函数都声明为“静态”,然后使用“导出\符号”导出一些函数名。一般来说,使“静态”函数全局可见不是一个好主意。2) 许多函数都有“inline”修饰符,但是,这些函数非常大。因此,编译器不会“内联”它们。如果从多个位置调用这些函数,则删除调用/返回序列所节省的微不足道的成本将被淹没。3) 内联函数应该在头文件中,因此多个源可以在文件中内联它们,“内联”函数(我没有全部检查)只调用一次,而且函数很大。因此:1)函数不会“内联”2)内联仅适用于调用多次的非常短的函数2具有重复定义的4个函数中的2个在jtag mm.c文件中。似乎所有4个重复函数都在jtag.c文件中定义/导出。强烈建议为函数使用唯一的名称,也许从jtag#u mm.c文件中删除“#include”行会有所帮助。我们还需要查看jtag.c的内容。但是,两个.c文件似乎都包含4个在两个文件中具有相同名称的函数。1)大多数/所有函数都声明为“静态”,然后使用“导出\符号”导出一些函数名。一般来说,使“静态”函数全局可见不是一个好主意