Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ IAR _ Error[Li005]: no definition for...

Автор: vesago Sep 10 2018, 18:47

Здравствуйте. Хочу прикрутить к проекту пример Mass Storage. Накидал тестовый проектик. Перенес в него нужные исходники из примера. Компилируется но не линкуется.

Error[Li005]: no definition for "ScsiCommImpl" [referenced from D:\WORK\test\Debug\Obj\scsi.o]
Error[Li005]: no definition for "EntrCritSection" [referenced from D:\WORK\test\Debug\Obj\scsi.o]
Error[Li005]: no definition for "ExtCritSection" [referenced from D:\WORK\test\Debug\Obj\scsi.o]

В принципе ругается, что в файле scsi.c используются функции, определения которых не находит. Хотя определения всех этих функций есть в подключенном scsi.h. Подскажите, пожалуйста - что ему (линкеру) не хватает? Пример без проблем собирается. Не могу определить критические отличия..

 test_2018_09102215_45.rar ( 162.9 килобайт ) : 15

Автор: jcxz Sep 11 2018, 05:30

Цитата(vesago @ Sep 10 2018, 21:47) *
В принципе ругается, что в файле scsi.c используются функции, определения которых не находит. Хотя определения всех этих функций есть в подключенном scsi.h. Подскажите, пожалуйста - что ему (линкеру) не хватает?

Компоновщику глубоко фиолетовы все .h вместе взятые. Он про них ничего не знает. Ему нужны только .obj, .lib. И значит тел данных функций у Вас там нет. А тела в .obj/.lib попадают из файлов исходного кода (.c/.cpp/.asm/...) усилиями компилятора либо из готовых библиотек (.lib) Отсюда следует что требуемых файлов исходного кода (или .lib) у Вас нет в проекте.

Автор: vesago Sep 13 2018, 10:36

На другом форуме помогли - в опциях проекта нужно было включить опцию C++ inline semantics.

Автор: AlexandrY Sep 13 2018, 10:55

Цитата(vesago @ Sep 13 2018, 13:36) *
На другом форуме помогли - в опциях проекта нужно было включить опцию C++ inline semantics.

Еще такое бывает когда в файлах *.c пытаются использовать функции из файлов *.cpp без объявления пространства имен extern "C" { }
Так что компоновщик тут совсем не при чем. Компоновщик пишет другое сообщение когда что-то не находит.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)