Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Ламерский вопрос по компиляции

Автор: zhukovia
Дата сообщения: 03.01.2007 19:12
Я в программировании на Gcc полный ламер. Уже неделю бьюсь над какой то фигней. Проблема в следующем . Есть SDK для написания своих программ для однопроводных устройств 1-Wire для linuxa. Он состоит из набора *.c и *.h файлов. В нем есть файл примера в исходниках (temp.c) и компилированный (temp). Начало исходника (temp.c) следующее:
---------------------начало-------------------------------
#include <stdlib.h>
#include <stdio.h>
#include "ownet.h"
#include "temp10.h"
#include "findtype.h"
// defines
#define MAXDEVICES 20
// global serial numbers
uchar FamilySN[MAXDEVICES][8];
// variables
int family_code;
//----------------------------------------------------------------------
// Main Test for DS1920/DS1820 temperature measurement
//
int main(int argc, char **argv)
{
float current_temp;
int i = 0;
//----------------------------------------
// Introduction header
printf("\n/---------------------------------------------\n");
и т.д.
---------------------конец-------------------------------
Компилированые, понятное дело, нормально работают, а когда я пытаюсь скомпилировать исходник “gcc temp.c” то выдаются ошибки компиляции
---------------------начало-------------------------------
tmp/ccUfH90Q.o: In function 'main':
temp.c.text+0x88): undefined reference to 'ouflcquireEx'
temp.c.text+OxaO): undefined reference to 'ouFrintErrorMsg'
temp.c.text+0xa5): undefined reference to 'ouHasErrors'
и т.д.
---------------------конец-------------------------------
Все файлы которые указанны в incude я положил в каталог с исходником (temp.c) я пробовал копировать и все файлы из SDK но эффекта 0. Я понимаю что проблема в том что я не указал компилятору какие то пути или надо еще что то не сделал с файлами которые были в SDK (там, кстати, есть makefile который я запустил он понаделал из *.c файлов *.o файлов). Вот только что никак не пойму. Подскажите, пожалуйста, где поковырять. Уже неделю ничего не могу найти. &#61516;
Автор: Cheery
Дата сообщения: 03.01.2007 19:14
zhukovia

Цитата:
Все файлы которые указанны в incude я положил в каталог с исходником

они могут потребовать еще и другие h файлы, поэтому лучше при компиляции указывать на директорию с ними, а не копировать
Автор: zhukovia
Дата сообщения: 03.01.2007 19:45
Я пробовал компилировать и в дирректории с SDK. Но ошибки компиляции всегда одни и теже.
Автор: Cheery
Дата сообщения: 03.01.2007 19:51
zhukovia
нужно подробнее смотреть описание.. там, возможно, может быть уже откомпилированная библиотека, которую нужно линковать при компиляции. и в ней описаны эти функции. поищи в содержимом файлов на названиям.
Автор: KADABRA
Дата сообщения: 03.01.2007 20:15
zhukovia

Цитата:
а когда я пытаюсь скомпилировать исходник “gcc temp.c”

Попробуй так:
gcc _тут_перечислены_все_.c_файлы_из_SDK temp.c
Скорее всего можно один раз скомпилировать SDK, а потом толкьо подключать библиотеку
Автор: zhukovia
Дата сообщения: 03.01.2007 21:21
Упоминания об функциях на которые ругается линкер есть в файле ownet.h но почемуто к этому файлу нет ownet.c файла. Зато эти функции есть в других С-файлах SDK.
кусок из ownet.h
------------------------начало-----------------------------
// Error handling
extern int owHasErrors(void); //На нее ругается линкер.
// ioutil.c functions prototypes
int key_abort(void); //На нее ругается линкер.
// external One Wire functions defined in owsesu.c
int owAcquireEx(char *port_zstr); //На нее ругается линкер.
------------------------конец-----------------------------
пробовал эти файлы копировать в папку с temp.c не помогает. Кстати почти во всех файлах идет #include <ownet.h> он наверное за "главного"..
Автор: Cheery
Дата сообщения: 03.01.2007 21:44
zhukovia

Цитата:
пробовал эти файлы копировать в папку с temp.c не помогает

а почему должно помогать? ты, при компиляции, должен указывать на них тоже. одних h файлов недостаточно.
Автор: zhukovia
Дата сообщения: 03.01.2007 22:09
А как узнать какие файлы вписывать? Ведь temp.c ссылается на ownet.h, а он в свою очередь еще на десятка два других. Разве gcc не должен по описаниям в h файлах сам их находить и компилировать? Или я чего то не так понял... в temp.c есть только ссылки:
#include "ownet.h"
#include "temp10.h"
#include "findtype.h"
Автор: Cheery
Дата сообщения: 03.01.2007 22:14
zhukovia

Цитата:
Разве gcc не должен по описаниям в h файлах сам их находить и компилировать?

с чего бы ? да, давно не писал на сях, но файл с заголовками не означает, что будет подключаться и c файл с таким же именем.

поэтому, сообственно, SDK компилируются в библиотеку, которая линкуется к своему проекту и тогда компилятор знает что и где.
либо при компиляции свой файл в ту же диру и компилировать *.c если, конечно, функция main только в одном файле.
Автор: zhukovia
Дата сообщения: 03.01.2007 22:31
Тогда можно еще дурацкий вопрос? А как скомпилировать эту библиотеку из SDK?
Автор: Cheery
Дата сообщения: 03.01.2007 22:49
zhukovia

Цитата:
А как скомпилировать эту библиотеку из SDK?

очень часто она уже скопилированная в комплекте идет
в такой ситуации нужны только она и h файл
Автор: zhukovia
Дата сообщения: 03.01.2007 22:51
Вроде разобрался. Подсматрел в makefile который идет с SDK. Там делается следующим образом GCC -DDEBUG -g -o temp temp.c temp10.o findtype.o и еще дохрена всяких *.o
А до этого делаются:
GCC -DDEBUG -с temp10.c
и т.д. т.е. создаются эти самые *.o

И что неужели так всегда и надо компилировать??? Охринеть...
Автор: Cheery
Дата сообщения: 03.01.2007 22:53
zhukovia

Цитата:
И что неужели так всегда и надо компилировать??? Охринеть...

нет.. я же сказал - скармливай *.c

Цитата:
еще дохрена всяких *.o

и есть откомпилированные файлы..
если есть makefile, то он и компилит библиотеку


ps: есть же уже precompiled
http://www.maxim-ic.com/products/ibutton/software/1wire/wirekit.cfm

Страницы: 1

Предыдущая тема: vbs запуск от прав админа локально


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.