The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Немогу скомпилировать"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 20:08 
Я в программировании на 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 файлов). Вот только что никак не пойму. Подскажите, пожалуйста, где поковырять. Уже неделю ничего не могу найти. 
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 03-Янв-07, 20:41 
Упс. Невнимательно прочитал твой пост. Посмотри присутствуют ли определения функций, на которые ругается линкер, в заголовочных файлах.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 20:47 
>Проблема в том, что тебе также необходимо скомпилировать сам SDK, а не
>только тестовый пример. Если в SDK есть Makefile, попробуй использовать make.
>Если нет (что очень странно), попробуй скормить gcc все *.c файлы
>вместе с temp.c.
Макеашду есть и я сделал make all. Он что то компилировал насоздавал файлов с расширением *.o. Но компиляции temp.c так и не происходит даже в директории с SDK.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 03-Янв-07, 21:09 
>Макеашду есть и я сделал make all. Он что то компилировал насоздавал
>файлов с расширением *.o. Но компиляции temp.c так и не происходит
>даже в директории с SDK.

В таком случае нужно указать gcc еще все *.o файлы. Например:

gcc -o temp temp.c *.o

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 21:56 
>Упс. Невнимательно прочитал твой пост. Посмотри присутствуют ли определения функций, на которые
>ругается линкер, в заголовочных файлах.

Упоминания есть в файле 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> он наверное за "главного".. :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 03-Янв-07, 21:15 
Кстати, уверен что тебе нужно компилить с помощью gcc, а не sdcc?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 21:59 
>Кстати, уверен что тебе нужно компилить с помощью gcc, а не sdcc?
Нет не уверен. А это, что, какой то другой компилятор?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 03-Янв-07, 22:34 
>>Кстати, уверен что тебе нужно компилить с помощью gcc, а не sdcc?
>Нет не уверен. А это, что, какой то другой компилятор?

sdcc - Small Device(s) C Compiler
то что ты описал очень похоже на пример из этого sdcc

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 22:55 
>>>Кстати, уверен что тебе нужно компилить с помощью gcc, а не sdcc?
>>Нет не уверен. А это, что, какой то другой компилятор?
>
>sdcc - Small Device(s) C Compiler
>то что ты описал очень похоже на пример из этого sdcc
Вот кусок readMe.txt Makefile к SDK может поможет понять какой компилятор.
README.TXT
---------------------начало----------------------------------
                        1-Wire Public Domain Kit

                         USerial Build for Linux
                              Version 3.00

Introduction
------------

   This port was targeted for and tested on a RedHat Linux X86 machine.
   The provided makefile will build all of the example programs distributed
   in the 3.00 1-Wire Public Domain release.

   Must specify target link file on the command line, i.e.:

       make all LINKFILE=win32lnk.o
       make atodtst LINKFILE=linuxlnk.o
       make temp LINKFILE=myWeirdOSlnk.c

   or, call make with either of the following two targets
   specified, 'win32' or 'linux':

       make win32
       make linux

   This will cause the make file to use the default link
   file for the target platform and build all applications.

   For documentation on the examples and the 1-Wire Public Domain
   kit in general please see the 'main' kit:
       http://www.ibutton.com/software/1wire/wirekit.html

Examples
--------
   temp

Tool Versions
-------------

   $ make -version
   GNU Make version 3.77, by Richard Stallman and Roland McGrath.
   Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
           Free Software Foundation, Inc.
   This is free software; see the source for copying conditions.
   There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
   PARTICULAR PURPOSE.

   $ gcc -dumpversion
   egcs-2.91.66

   $ gcc -dumpmachine
   i386-redhat-linux

General Notes
-------------

   - Relevant 1-Wire Information:
     http://www.ibutton.com
     http://www.maxim-ic.com/

   - 1-Wire Mailing List:
     http://lists.dalsemi.com/mailman/listinfo/1-wire-software-development
---------------------конец----------------------------------

MAKEFILE

---------------------начало----------------------------------
#
# Must specify target link file on the command line, i.e.:
#
#     make all LINKFILE=win32lnk.o
#     make atodtst LINKFILE=linuxlnk.o
#     make temp LINKFILE=myWeirdOSlnk.c
#
# or, call make with either of the following two targets
# specified, 'win32' or 'linux':
#
#     make win32
#     make linux
#
# This will cause the make file to use the default link
# file for the target platform and build all applications.
#

CC = gcc

# Cygwin flags
#CFLAGS = -mno-cygwin -DDEBUG -c
#LFLAGS = -mno-cygwin -DDEBUG -g -o $@
---------------------конец----------------------------------

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 23:50 
>>>Кстати, уверен что тебе нужно компилить с помощью gcc, а не sdcc?
>>Нет не уверен. А это, что, какой то другой компилятор?
>
>sdcc - Small Device(s) C Compiler
>то что ты описал очень похоже на пример из этого sdcc

Вроде разобрался. Подсматрел в makefile который идет с SDK. Там делается следующим образом GCC -DDEBUG -g -o temp temp.c temp10.o findtype.o и еще дохрена всяких *.o
А до этого делаются:
GCC -DDEBUG -с temp10.c
и т.д. т.е. создаются эти самые *.o

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 04-Янв-07, 02:03 
>Вроде разобрался. Подсматрел в makefile который идет с SDK. Там делается следующим
>образом GCC -DDEBUG -g -o temp temp.c temp10.o findtype.o и еще
>дохрена всяких *.o
>А до этого делаются:
>GCC -DDEBUG -с temp10.c
>и т.д. т.е. создаются эти самые *.o
>
>И что неужели так всегда и надо компилировать??? Охринеть...

Для этого и нужен makefile.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 04-Янв-07, 20:22 
C этим я разобрался боле-менее. Но возникла другая загвоздка. Если я пробую компилировать в Linux SuSe 10 то все нормально, а если же пытаюсь сделать тоже самое во FreeBSD 6.1 то ничего не получается. GCC стоит свежий и там и там. Я догадываюсь что проблемма в том что в Linuxe есть какие то пакеты которых нет во FreeBSD. Можно как то узнать чего не хватает, из пакетов, FreeBSD?
часть выдаваемых ошибок
------------------начало--------------------
syntax error before "ulong"
syntax error before "ushort"
------------------конец--------------------
строки на которую ругается компилер
------------------начало--------------------
int  EnterHex(char *msg, int numchars, ulong *value);
void setcrc16(int portnum, ushort reset);
------------------конец--------------------
как я понял в вызываемой функции есть параметры не извесных системе типов. Но почему тогда в Linuxe все нормально. Кстати бинарники скомпилированые в Linuxe идут и во FreeBSD, правда только после того как я скачал и установил пакэдж скомпилированной библиотеки для этих устройств (для FreeBSD). Так и должно быть?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Немогу скомпилировать"  
Сообщение от drioptr (ok) on 04-Янв-07, 23:29 
>syntax error before "ulong"
>syntax error before "ushort"

ulong и ushort это нестандартные для C типы. Они определены в заголовочных файлах Linux'a, а в FreeBSD нет. Решить это можно добалением в самый главный заголовочный файл этого SDK подобных строчек:


#ifdef __FreeBSD__
        typedef unsigned short          ushort;
        typedef unsigned long           ulong;
#endif

>...Кстати бинарники скомпилированые в
>Linuxe идут и во FreeBSD, правда только после того как я
>скачал и установил пакэдж скомпилированной библиотеки для этих устройств (для FreeBSD).
>Так и должно быть?

Да. FreeBSD может выполнять программы скомпилированные для Linux. Но не наоборот.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 06-Янв-07, 18:10 
>>syntax error before "ulong"
>>syntax error before "ushort"
>
>ulong и ushort это нестандартные для C типы. Они определены в заголовочных
>файлах Linux'a, а в FreeBSD нет. Решить это можно добалением в
>самый главный заголовочный файл этого SDK подобных строчек:
>
 
>#ifdef __FreeBSD__
>        typedef unsigned short  
>        ushort;
>        typedef unsigned long  
>         ulong;
>#endif
>

>
Большое спасибо за подсказку.... :-) Теперь дело пойдет быстрее... :-)

>>...Кстати бинарники скомпилированые в
>>Linuxe идут и во FreeBSD, правда только после того как я
>>скачал и установил пакэдж скомпилированной библиотеки для этих устройств (для FreeBSD).
>>Так и должно быть?
>
>Да. FreeBSD может выполнять программы скомпилированные для Linux. Но не наоборот.
Даже без linux-base пакета?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 06-Янв-07, 18:13 
Еще один вопрос. Как указать компилятору путь к каталогу с SDK? А то как то неудобно работать в каталоге с SDK.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Немогу скомпилировать"  
Сообщение от phpcoder (??) on 06-Янв-07, 18:23 
>Еще один вопрос. Как указать компилятору путь к каталогу с SDK?

Для gcc это -I для хедеров и -L для библиотек.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Немогу скомпилировать"  
Сообщение от zhukovia email(ok) on 03-Янв-07, 22:04 
Вот кусок readMe.txt Makefile к SDK может поможет.
README.TXT
---------------------начало----------------------------------
                        1-Wire Public Domain Kit

                         USerial Build for Linux
                              Version 3.00

Introduction
------------

   This port was targeted for and tested on a RedHat Linux X86 machine.
   The provided makefile will build all of the example programs distributed
   in the 3.00 1-Wire Public Domain release.

   Must specify target link file on the command line, i.e.:

       make all LINKFILE=win32lnk.o
       make atodtst LINKFILE=linuxlnk.o
       make temp LINKFILE=myWeirdOSlnk.c

   or, call make with either of the following two targets
   specified, 'win32' or 'linux':

       make win32
       make linux

   This will cause the make file to use the default link
   file for the target platform and build all applications.

   For documentation on the examples and the 1-Wire Public Domain
   kit in general please see the 'main' kit:
       http://www.ibutton.com/software/1wire/wirekit.html

Examples
--------
   temp

Tool Versions
-------------

   $ make -version
   GNU Make version 3.77, by Richard Stallman and Roland McGrath.
   Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
           Free Software Foundation, Inc.
   This is free software; see the source for copying conditions.
   There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
   PARTICULAR PURPOSE.

   $ gcc -dumpversion
   egcs-2.91.66

   $ gcc -dumpmachine
   i386-redhat-linux

General Notes
-------------

   - Relevant 1-Wire Information:
     http://www.ibutton.com
     http://www.maxim-ic.com/

   - 1-Wire Mailing List:
     http://lists.dalsemi.com/mailman/listinfo/1-wire-software-development
---------------------конец----------------------------------

MAKEFILE

---------------------начало----------------------------------
#
# Must specify target link file on the command line, i.e.:
#
#     make all LINKFILE=win32lnk.o
#     make atodtst LINKFILE=linuxlnk.o
#     make temp LINKFILE=myWeirdOSlnk.c
#
# or, call make with either of the following two targets
# specified, 'win32' or 'linux':
#
#     make win32
#     make linux
#
# This will cause the make file to use the default link
# file for the target platform and build all applications.
#

CC = gcc

# Cygwin flags
#CFLAGS = -mno-cygwin -DDEBUG -c
#LFLAGS = -mno-cygwin -DDEBUG -g -o $@
---------------------конец----------------------------------

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру