|
|
  |
Code::Blocks -> How To, Как бы начать... |
|
|
|
Nov 26 2008, 07:38
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210

|
варнинги вывел... появились предупреждения о коментах типа с++ в файлах С90 и т.п компиляция проходит, хедеры все доступны, файлы для чистоты эксперимента свалил в одну папку. не вижу что-бы линкеру передавались все файлы проекта, передается только один(как нибудь можно вывести в консоль запуск линкера с ключами, что-бы посмотреть как это делает среда?) и естественно если он один у линкера - ошибки - нет обьектов объявленных там как extern или внешних функций. Цитата Compiling: ..\Lib\DELAY.C Compiling: ..\Lib\buffer.c ..\Lib\buffer.c:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\buffer.c:2:1: warning: (this will be reported only once per input file) In file included from ..\Lib\buffer.c:18: ..\Lib\/buffer.h:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/buffer.h:2:1: warning: (this will be reported only once per input file) In file included from ..\Lib\buffer.c:21: ..\Lib\/avrlibdefs.h:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/avrlibdefs.h:2:1: warning: (this will be reported only once per input file) ..\Lib\buffer.c: In function 'bufferGetAtIndex': ..\Lib\buffer.c:101: warning: ISO C90 forbids mixed declarations and code ..\Lib\buffer.c: In function 'bufferIsNotFull': ..\Lib\buffer.c:135: warning: ISO C90 forbids mixed declarations and code Compiling: ..\Lib\ds18b20.c ..\Lib\ds18b20.c:3:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\ds18b20.c:3:1: warning: (this will be reported only once per input file) In file included from ..\Lib\ds18b20.c:5: ..\Lib\/..\Lib\1WIRE.H:7:25: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/..\Lib\1WIRE.H:7:25: warning: (this will be reported only once per input file) In file included from ..\Lib\ds18b20.c:6: ..\Lib\/ds18b20.h:11:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/ds18b20.h:11:1: warning: (this will be reported only once per input file) Compiling: main.c In file included from main.c:6: ..\Lib\ds18b20.h:11:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\ds18b20.h:11:1: warning: (this will be reported only once per input file) main.c:14:1: warning: C++ style comments are not allowed in ISO C90 main.c:14:1: warning: (this will be reported only once per input file) Compiling: ..\Lib\1WIRE.C Linking console executable: bin\Debug\testProject.elf obj\Debug\Lib\ds18b20.o: In function `ds18b20Init': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:91: undefined reference to `w1_rom_search' obj\Debug\Lib\ds18b20.o: In function `ds1820StartConversion': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:139: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:151: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:154: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:157: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:160: undefined reference to `w1_command' obj\Debug\Lib\ds18b20.o: In function `ds1820ReadTemperature': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:199: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:209: undefined reference to `w1_bit_io' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:218: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:231: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:236: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:242: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:247: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:254: undefined reference to `w1_byte_rd' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:255: undefined reference to `w1_byte_rd' Process terminated with status 1 (0 minutes, 1 seconds) 15 errors, 18 warnings где ошибка?)) в каких настройках
|
|
|
|
|
Nov 26 2008, 08:55
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210

|
Да, спасибо, уже нашел где это включить... и, как оказалось, линкеру передаются все файлы. Однако, немогу понять во первых почему линкуется другим файлом, обычно компилер и линкер - один и тот-же файл Цитата avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c ds18b20.c -o obj\Debug\ds18b20.o avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c main.c -o obj\Debug\main.o avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c 1WIRE.C -o obj\Debug\1WIRE.o avr-g++.exe -Lobj\Debug -Lobj\Debug\Lib -LC:\WinAVR\avr\lib -o bin\Debug\testProject.elf obj\Debug\DELAY.o obj\Debug\buffer.o obj\Debug\ds18b20.o obj\Debug\main.o obj\Debug\1WIRE.o -mmcu=atmega128 -Wl,-Map=bin\Debug\testProject.elf.map,--cref obj\Debug\ds18b20.o: In function `ds1820StartConversion': C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:157: undefined reference to `w1_command' C:\work\TestFolder\testProject/ds18b20.c:160: undefined reference to `w1_command' obj\Debug\ds18b20.o: In function `ds1820ReadTemperature': C:\work\TestFolder\testProject/ds18b20.c:199: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:209: undefined reference to `w1_bit_io' C:\work\TestFolder\testProject/ds18b20.c:218: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:247: undefined reference to `w1_command' C:\work\TestFolder\testProject/ds18b20.c:254: undefined reference to `w1_byte_rd' C:\work\TestFolder\testProject/ds18b20.c:255: undefined reference to `w1_byte_rd' obj\Debug\ds18b20.o: In function `ds18b20Init': C:\work\TestFolder\testProject/ds18b20.c:91: undefined reference to `w1_rom_search' Process terminated with status 1 (0 minutes, 1 seconds) 10 errors, 0 warnings и в принципе видно, что проблема только в этом файле. Интересен порядок использования файлов. изменение линкера результата не дало... проблема где-то в моих проектах, на тестовом проекте работает нормально
Сообщение отредактировал Григорий2000 - Nov 26 2008, 09:04
|
|
|
|
|
Nov 26 2008, 18:27
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Привет, Григорий2000! Цитата(Григорий2000 @ Nov 26 2008, 13:55)  Код C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset' Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm?
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Nov 26 2008, 18:55
|
Частый гость
 
Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210

|
Цитата(alx2 @ Nov 26 2008, 21:27)  Привет, Григорий2000! Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm? уверен на 220% я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество)
|
|
|
|
|
Nov 27 2008, 06:58
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(Григорий2000 @ Nov 26 2008, 20:55)  уверен на 220% я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество) Ответ тут получается очень простым. Если вы используете функции написанные на С в программе на С++, то её (функцию) необходимо обьявить как extern "C". Это всё надо так как компилятор С++ добавляет префиксы и постфиксы к именам всех функций что б различать перегруженные, а компилятор С - нет (как это называется по научному - извините не помню). Универсальный подход к такому вопросу такой: во все заголовочные файлы добавляйте такие макросы Код #ifndef SOME_HEADER_H #define SOME_HEADER_H
#ifdef __cplusplus extern "C" { #endif
// тут обьявлены функции
#ifdef __cplusplus } #endif
#endif //SOME_HEADER_H nm утилита из набора binutils для вывода всех символов, обьявленных в обьектном файле, например Код nm ds18b20.o выдаст список всех имён функций и не только в этом файле. Если вы откомпилируете один и тот же исходник компилятором С и С++, и посмотрите на имена функций - поймете разницу и почему линкер не находил функций.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|