gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:51 24 4
gpt4 key购买 nike

我收到以下错误消息,我检查了文件但无法弄清楚为什么或如何解决这些错误。请帮忙。

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 的副本放在 this link

谢谢。这是 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,您或许可以验证我认为的问题所在。正如彼得所提到的,变量被声明了两次。一次通过 jtag.c,一次通过 jtag-mm.c。例如,我看到了以下几行:

uint32_t msm_jtag_save_cntr[NR_CPUS];
uint32_t msm_jtag_restore_cntr[NR_CPUS];

在两个文件中。但是我试图在一个文件中将它们注释掉,但我得到了一个错误,因为该变量在函数的同一文件中使用。那么正确的处理方法是什么?我可以在头文件中声明一次,然后从两个源文件中删除它吗?或者我应该将减速留在一个源文件中,并将其包含在另一个源文件中?

Here是 jtag.h 的副本谢谢

最佳答案

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

由于大多数错误在“注释掉 jtag.h”时消失了,最可能的解释是头文件有定义,并且源文件之一是 #includeing 该头文件文件不止一次(直接或 - 更可能 - 间接地,由于其他头文件 #includeing 它)。一个常见的解决方案是在表单的头文件中添加 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 对您的 header 进行处理 - 因此链接器会看到在多个目标文件中定义的符号。该问题的解决方案是将有问题的定义(通常是函数或静态变量)从头文件移动到项目中的一个(且仅一个)源文件。

关于android - 如何解决多定义编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com