IAR 6.1 для AVR Linker не видит ассемблерные процедуры, если Си-шный код компилируется в режиме С++. Есть рабочий проект на С. Компилируется и исполняется без ошибок.
Проект состоит из нескольких файлов с раширением .с и одного ассемблерного с расширением .s90
Хочу перевести на С++.
Проект компилируется без ошибок, но линкер не видит ассемблерные функции и выдает ошибки следующего содержания:
MODULE DES_Encrypt
PUBLIC DES_Encrypt
RSEG CODE
DES_Encrypt:
DES_INTERNAL_Prolog
DES_INTERNAL_Load_Data
DES_INTERNAL_LoadKey1
clh
DES_INTERNAL_DES_Routine
DES_INTERNAL_Store_Data
DES_INTERNAL_Epilog
adiw r28,2
ret
ENDMOD
Макросы DES_INTERNAL_Prolog, DES_INTERNAL_Load_Data, DES_INTERNAL_LoadKey1, DES_INTERNAL_DES_Routine, DES_INTERNAL_Store_Data, DES_INTERNAL_Epilog не описываю из экономии места.
В заголовочном файле функция объявлена вот так:
void DES_Encrypt(BYTE __huge* pOut, BYTE __huge* pIn, BYTE __near* key);
Как слинковать проект с файлами С++ ?
Error[e46]: Undefined external "DES_Encrypt(unsigned char __huge *, unsigned char __huge *, unsigned char *)" referred in main ( D:\Soft\Project\Debug\Obj\main.r90 )Соответствующая ассемблерная функция написана так:
-
- Решил проблему с помощью extern "C" {...} - Ale3000(25.11.2011 07:04)