Я получаю следующие сообщения об ошибках, и я проверил файл, но не могу понять, почему и как устранить ошибки. Пожалуйста помоги.Как обратиться к ошибке компилятора нескольких определений
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.c. Однако кажется, что оба файла .c содержат 4 функции, которые имеют одинаковое имя в обоих файлах. – user3629249
1) большинство/все функции объявлены «статическими», затем некоторые из имен функций экспортируются с помощью «EXPORT_SYMBOL». В общем, неплохо было бы сделать «статические» функции глобально видимыми. 2) многие из функций имеют модификатор «inline», однако функции очень большие. Поэтому компилятор не будет «встроить» их. и тривиальная экономия от удаления последовательностей вызова/возврата будет захламлена, если эти функции будут вызваны из более одного места. 3) встроенные функции должны быть в заголовочных файлах, поэтому несколько источников могут встраивать в них – user3629249
, а функции inline'd (я не проверял их все) вызывается только один раз, а функции большие.так что: 1) функции не будут «inline'd 2» inline применимы только для ОЧЕНЬ коротких функций, которые называются многократно – user3629249