Полная версия этой страницы:
ошибка li006
Здравствуйте.
Столкнулся с проблемой: ругается линкер.
Ругань его состоит вот в чем:
********************************************************************************
******************************
Building configuration: Prog - Bin
Updating build tree...
236 file(s) deleted.
Updating build tree...
Linking
Error[Li006]: duplicate definitions for "LWIP_TASK_STK"; in "D:\Project\Bin\Obj\auth.o", and "D:\Project\Bin\Obj\dhcp.o"
Error[Li006]: duplicate definitions for "null_timeouts"; in "D:\Project\Bin\Obj\auth.o", and "D:\Project\Bin\Obj\dhcp.o"
.
.
.
Error[Li006]: duplicate definitions for "pvNullPointer"; in "D:\Project\Bin\Obj\auth.o", and "D:\Project\Bin\Obj\dhcp.o"
Error while running Linker
Total number of errors: 100
Total number of warnings: 58
********************************************************************************
********************************************
Подскажите, пожалуйста, что бы это значило?
Скорее всего, в модулях auth и dhcp перечислены одни и те же глобальные переменные, а extern ни в одном из них не стоит...
Цитата(MiDV @ Aug 9 2011, 17:15)

Error[Li006]: duplicate definitions for "LWIP_TASK_STK"; in "D:\Project\Bin\Obj\auth.o", and "D:\Project\Bin\Obj\dhcp.o"
Error[Li006]: duplicate definitions for "null_timeouts"; in "D:\Project\Bin\Obj\auth.o", and "D:\Project\Bin\Obj\dhcp.o"
...
Подскажите, пожалуйста, что бы это значило?
А как ещё можно понять написанное? Ведь ясно же сказано, что объявление продублировано в разных файлах, поэтому линкер не знает, какое ему взять, это ошибка. Смотрите, как эти объявления сделаны в указанных файлах. Хинт: смотрите заголовки - возможно, это объявление сделано в заголовочном файле, который включается в эти.
Извините, вскочило из головы, хотя хотел написать...
Все переменные, фигурирующие в данных ошибках, определены только в одном месте, и более нигде.
И все эти переменные определены ТОЛЬКО в одном файле.
И что интересно, при подключении /отключении этого файла в указанном месте, он (линкер) выдает те же ошибки, только файл .о другой.
Цитата(MiDV @ Aug 9 2011, 14:42)

Все переменные, фигурирующие в данных ошибках, определены только в одном месте, и более нигде. И все эти переменные определены ТОЛЬКО в одном файле.
Что это за файл? Встречается ли в других файлах #include с этим файлом?
Цитата(MiDV @ Aug 9 2011, 17:42)

И что интересно, при подключении /отключении этого файла в указанном месте, он (линкер) выдает те же ошибки, только файл .о другой.
Это и указывает, что объявление это сделано в заголовочном файле - оно, таким образом, неявно описано во всех исходных файлах, которые #include этот заголовочный файл. А линкер выдаёт всего два файла, потому что для ошибки достаточно уже этого. Уберёте один из них - он предъявит следующий.
Ищите в заголовочном файле. Там должны быть только определения и объявления с квалификатором extern. Остальные объявления должны быть в исходных файлах.
Спасибо за участие.
Да, действительно, во всех файлах, где ошибка, присутствует include этого единственного.
Еще один вопрос.
линкер опять ругается, но только ошибка у него li005:
Building configuration: Prog - Bin
Updating build tree...
.
.
.
Linking
Error[Li005]: no definition for "sys_arch_protect" [referenced from D:\Project\Bin\Obj\pbuf.o]
Error[Li005]: no definition for "sys_arch_unprotect" [referenced from D:\Project\Bin\Obj\pbuf.o]
Error[Li005]: no definition for "sys_arch_sem_wait" [referenced from D:\Project\ Bin\Obj\mem.o]
Error[Li005]: no definition for "sys_sem_signal" [referenced from D:\Project\Bin\Obj\mem.o]
Error while running Linker
Total number of errors: 4
Total number of warnings: 25
Понимаю, что они не объявлены, но как это сделать? При попытке что-то добавить в .h файлы возникает много ругани.Подскажите, из-за чего возникают данные ошибки.Спасибо.
Dog Pawlowa
Aug 11 2011, 06:59
Цитата(MiDV @ Aug 11 2011, 09:42)

Понимаю, что они не объявлены, но как это сделать? При попытке что-то добавить в .h файлы возникает много ругани.
Вы вообще про волшебное слово extern слышали?
кое-что слышал.
extern - спецификатор хранения.
и я пробовал в pbuf.h sys_arch_protect объявить как extern.
линкер выдал ту же ошибку.
чтобы было понятнее:
я прикручиваю стек LwIP к ucos.
инициализация стека проходит без проблем
а когда инициализирую ppp - вот такая петрушка получается.
и по поводу extern: может я не там объявляю?
Цитата(MiDV @ Aug 11 2011, 11:27)

и я пробовал в pbuf.h sys_arch_protect объявить как extern.
линкер выдал ту же ошибку.
Вероятно, четыре идентификатора, перечисленные в сообщениях об ошибке, нигде не объявлены или везде объявлены со спецификатором extern. Если - последнее, то в одном месте этот спецификатор следует убрать (но, не в файле, который подключен к нескольким другим через include), или вставить в нужное место объявление (без extern).
нет. все эти переменные объявлены нормально.
как только я добавляю extern - идут ошибки компилятора, что тип переменной неопределен. если явно задаешь тип - typedef - выдает предупреждение, что данный тип уже объявлен, а линкер все равно указывает на эту же ошибку
Может кто посоветует, где можно найти описание ошибок линкера (юзаю IAR5). Буду премного благодарен. Интересует - чего он вообще хочет, потому что, казалось бы, совсем малюпасенькие действия приводят к непредсказуемой реакции.
Вам линкер говорит
Цитата
Error[Li005]: no definition...
, а Вы:
Цитата
переменные объявлены нормально
Всё-таки - объявлены не нормально, раз выдаёт сообщение об ошибке!
sys_prot_t sys_arch_protect(void);
а перед этим:
typedef unsigned long __istate_t;
typedef __istate_t sys_prot_t;
Цитата(MiDV @ Aug 11 2011, 12:42)

Интересует - чего он вообще хочет
В сообщении об ошибке ведь всё написано... Трудности с переводом с английского?
А раз выдает сообщение - то что-то на так. А чтобы разобраться - надо почитать.
Просто стек уже в готовом виде, компилится без ошибок, а как начинаешь инициализировать - тут и возникают непонятки...
Цитата(MiDV @ Aug 11 2011, 12:51)

sys_prot_t sys_arch_protect(void);
а перед этим:
typedef unsigned long __istate_t;
typedef __istate_t sys_prot_t;
Так все эти "sys_..." - функции? Наверное, файл с этими функциями не включен в проект, или Вы их забыли написать...
не. с англицким все путем. просто как достучаться до этого файла, на который ссылка?
Цитата(MiDV @ Aug 11 2011, 12:56)

А чтобы разобраться - надо почитать.
Так сообщение об ошибке и читайте: "в модуле pbuf есть обращение к sys_arch_protect, однако самого sys_arch_protect Вы не определили".
sys_prot_t sys_arch_protect(void)
{
sys_prot_t Ret = __get_interrupt_state();
__disable_interrupt();
return(Ret);
}
это определение из файла aaa.c
sys_prot_t sys_arch_protect(void); - это из файла aaa.h
#include aaa.h - это из файла bbb.c, в котором я подключаю функцию инициализации. А линкер ругается на файл, который я вообще не трогаю.
Я знаю, что дело не в бобине, но не хватает знания, где мой про..б?
Файл aaa.c в проект включен?
да. включен.
он присутствует в списке билдера.
Причем, если поискать по проекту sys_arch_protect - то он фигурирует только в двух файлах - aaa.c и aaa.h
Ни о каком файле, на который ссылается линкер и речи не идет
Цитата(MiDV @ Aug 11 2011, 13:20)

Причем, если поискать по проекту sys_arch_protect - то он фигурирует только в двух файлах - aaa.c и aaa.h
При поиске укажите "Project files and all include files"
эта опция у меня и стоит.
но все равно...
Попробуйте проделать для Вашего проекта "Rebuild All"
Наверное, нашел в чем дело:
в aaa.c есть строчка #define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()
а в том, на который ругается линкер, есть SYS_ARCH_DECL_PROTECT(old_level);
но опять, же aaa.h подключен.
Цитата(MiDV @ Aug 11 2011, 14:06)

но опять, же aaa.h подключен.
Должен быть включен в проект не aaa.h, а файл aaa.c
Проверьте в проекте опции этого файла (не установлена ли галка "Exclude from build"), сравните с опциями других файлов.
Я уже не знаю как бороться...
Подскажите, кто может.
Есть проект.
Он компилится нормально и нормально работает в девайсе.
Добавляю в файле bbb.c функцию aaa(); которая прописана в файле aaa.c и aaa.h
Добавляю в файл bbb.с #include aaa.h
идет ошибка линкера li005:Error[Li005]: no definition for "aaa" [referenced from D:\Project\Bin\Obj\bbb.o]
Дописываю в aaa.h строку "#define aaa()" и все становится нормально.
Почему?
Откуда ноги растут???
zltigo
Aug 12 2011, 08:33
QUOTE (MiDV @ Aug 12 2011, 11:26)

Почему?
Потому, что Вы не ведаете, что творите и не видите, что пишите

. Посему все Ваши слова описывающие ситуацию просто дезинформация. Если выложите проект, то исправить "проблему" видя то, что Вы РЕАЛЬНО написали, секундное дело.
Или еще
такая же ситуация, только функция определена в хидере так:
#ifndef aaa
u32_t aaa(void);
#endif
А тут уж дописывай что хошь - не помогает...
Как побороть?
не вопрос.
Что именно Вам надо?
Цитата(MiDV @ Aug 12 2011, 12:26)

Дописываю в aaa.h строку "#define aaa()" и все становится нормально.
Почему?
Откуда ноги растут???
Вероятно, потому, что файл aaa.c не включен в проект...
Строка "#define aaa()" в файле aaa.h предписывает препроцессору заменять обращения к функции aaa() на "пусто". Т.е. фактически исключает вызов функции aaa() из всех модулей, в которых файл aaa.h подключен через include.
Заархивируйте Ваш проект каким-нибудь распространненным архиватором (zip, например). Выложите (прикрепите к сообщению) этот архив, чтобы желающие Вам помочь смогли сами разобраться с Вашими ошибками, а не судить о них по Вашим сообщениям.
Прикрепил упакованный проект.
в файле LwIP.c идет вызов pppInit();
Линкер выдает 3 ошибки li005.
zltigo
Aug 12 2011, 10:43
Я конечно дико извиняюсь, но Вам надо начинать с помигать светодиодом и чтения букварей

. Операционки и Стеки много позже....
1. Если по честному то у Вас в так называемом "проекте" не 3 ошибки а 224 и 30 предупреждений.
Total number of errors: 224
Из-за конфликтов в дважды включенных хидерах идущих в комплекте с компилятором и зачем-то еще в комплекте с операционкой. Причем с операционкой старые в комплекте.
Total number of warnings: 30
Нет прототипов для некоторых библиотечных функций и лишние переменные
2. Те три ошибки, которые Вас особо взволновали, это совершенно законные ошибки, поскольку вот этих трех функций
Error[Li005]: no definition for "sys_jiffies" [referenced from D:\WORK_ARM\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\Debug\Obj\ppp.o]
Error[Li005]: no definition for "sio_write" [referenced from D:\WORK_ARM\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\Debug\Obj\ppp.o]
Error[Li005]: no definition for "sio_read_abort" [referenced from D:\WORK_ARM\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\Debug\Obj\ppp.o]
в присланном Вами проекте нет. СОВСЕМ НЕТ. Не написали Вы их. Вот так.
Не знаю, где Вы нашли столько ошибок и предупреждений.
Я распаковал архив и откомпилил его.
Вот результат:
Building configuration: STM32_F107_uCOS_5.30 - Debug
Updating build tree...
296 file(s) deleted.
Updating build tree...
netdb.c
os_tmr.c
igmp.c
netifapi.c
err.c
stm32f10x_i2c.c
udpecho.c
os_task.c
stm32f10x_flash.c
os_dbg.c
bsp_int.c
tcp_in.c
stm32f10x_spi.c
lib_str.c
inet.c
lib_mem.c
icmp.c
tcpserver2.c
os_flag.c
lwIP.c
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\port\lwIP.c 142
tcpserver.c
Warning[Pe177]: variable "send_data" was declared but never referenced D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\netapp\tcpserver.c 48
misc.c
api_lib.c
netbuf.c
tcpmultiserver.c
os_core.c
system_stm32f10x.c
udpserver.c
os_mutex.c
magic.c
chap.c
fsm.c
Warning[Pe223]: function "strlen" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\fsm.c 291
Warning[Pe223]: function "memcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\fsm.c 345
Warning[Pe550]: variable "code" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\fsm.c 834
Warning[Pe550]: variable "id" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\fsm.c 834
dhcp.c
slipif.c
loopif.c
tcp_out.c
Warning[Pe550]: variable "tcphdr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\core\tcp_out.c 458
Warning[Pe550]: variable "tcphdr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\core\tcp_out.c 871
Warning[Pe550]: variable "tcphdr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\core\tcp_out.c 925
ppp.c
Warning[Pe177]: variable "pc" was declared but never referenced D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 309
Warning[Pe177]: variable "pc" was declared but never referenced D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 328
Warning[Pe550]: variable "c" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 731
pap.c
Warning[Pe223]: function "strlen" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 127
Warning[Pe223]: function "memset" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 442
Warning[Pe550]: variable "msg" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 467
Warning[Pe550]: variable "msg" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 506
Warning[Pe223]: function "memcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 560
Warning[Pe223]: function "memcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\pap.c 592
app.c
stats.c
stm32f10x_gpio.c
sample_http.c
md5.c
ip_frag.c
udpclient.c
sys_arch.c
Warning[Pe550]: variable "ubErr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\port\sys_arch.c 119
Warning[Pe550]: variable "ubErr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\port\sys_arch.c 134
Warning[Pe550]: variable "ucErr" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\port\sys_arch.c 277
core_cm3.c
os_q.c
sample_TTCP.c
Warning[Pe550]: variable "data" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\netapp\sample_TTCP.c 115
auth.c
Warning[Pe223]: function "memcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\auth.c 365
Warning[Pe223]: function "memset" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\auth.c 389
Warning[Pe223]: function "memset" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\auth.c 420
Warning[Pe223]: function "strcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\auth.c 881
Warning[Pe223]: function "strcpy" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\auth.c 884
memp.c
os_mem.c
inet_chksum.c
dns.c
ppp_oe.c
chpms.c
randm.c
Warning[Pe223]: function "srand" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\randm.c 205
Warning[Pe223]: function "rand" declared implicitly D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\randm.c 243
raw.c
ethernetif.c
etharp.c
ip_addr.c
app_vect_v5.c
mem.c
cpu_c.c
udp.c
vj.c
api_msg.c
autoip.c
bsp.c
bsp_periph.c
cpu_a.asm
init.c
ip.c
ipcp.c
lcp.c
lib_mem_a.asm
netdatapack.c
Warning[Pa093]: implicit conversion from floating point to integer D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\netapp\netdatapack.c 71
netif.c
netio.c
os_cpu_a.asm
os_cpu_c.c
os_mbox.c
os_sem.c
os_time.c
pbuf.c
sockets.c
stm3210c_eval_lcd.c
stm32_eth.c
stm32f10x_adc.c
stm32f10x_can.c
stm32f10x_dbgmcu.c
stm32f10x_exti.c
stm32f10x_rcc.c
stm32f10x_tim.c
stm32f10x_usart.c
sys.c
tcp.c
tcpclient.c
tcpecho.c
Warning[Pe550]: variable "err" was set but never used D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\netapp\tcpecho.c 47
tcpip.c
Linking
Error[Li005]: no definition for "sys_jiffies" [referenced from D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\Debug\
Obj\ppp.o]
Error[Li005]: no definition for "sio_write" [referenced from D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\Debug\Obj\
ppp.o]
Error[Li005]: no definition for "sio_read_abort" [referenced from D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\IAR\F107_uCOS\
Debug\Obj\ppp.o]
Error while running Linker
Total number of errors: 3
Total number of warnings: 31
/*===========================================================================*/
А вот что по поиску предмета первой ошибки:
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\include\lwip\sys.h 121 #ifndef sys_jiffies
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\include\lwip\sys.h 122 u32_t sys_jiffies(void); /* since power up. */
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 803 pc->lastXMit = sys_jiffies();
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 902 if ((sys_jiffies() - pc->lastXMit) >= PPP_MAXIDLEFLAG) {
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 906 pc->lastXMit = sys_jiffies();
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 1057 pc->lastXMit = sys_jiffies();
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 1104 if ((sys_jiffies() - pc->lastXMit) >= PPP_MAXIDLEFLAG) {
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\ppp.c 1107 pc->lastXMit = sys_jiffies();
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\randm.c 201 avRandomSeed += sys_jiffies(); /* XXX */
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\randm.c 226 avRandomSeed += (sys_jiffies() - last_jiffies); /* XXX */
D:\Project_MiDV\TCP_IP stack\Project\STM32_F107_lwIP_uCOS\lwIP\src\netif\ppp\randm.c 228 last_jiffies = sys_jiffies();
----------
Found 11 instances. Searched in 251 files.
Во второй строке сверху она определяется.
Хотя...
Это стандартный tcpip стек LwIP v.1.3.0
И я пытаюсь использовать в нем ppp.
zltigo
Aug 12 2011, 11:33
QUOTE (MiDV @ Aug 12 2011, 14:13)

Во второй строке сверху она определяется.
Особо тяжелый случай

. Букварь читать рано. Надо слушать сказки про Ходжу Насреддина. У него есть популярное объяснение разницы между словом Халва (объявление функции)и собственно самой Халвой (функцией). Написав слово u23 halva(void); Вы не получили ничего, кроме слова Халва. Самой Халвы нет и линкеру ее взять негде.
Да, действительно, эти функции не прописаны.
мол, кому надо - напишете
Спасибо всем.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.