The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Немогу скомпилировать, !*! zhukovia, 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 файлов). Вот только что никак не пойму. Подскажите, пожалуйста, где поковырять. Уже неделю ничего не могу найти. 
  • Немогу скомпилировать, !*! drioptr, 20:41 , 03-Янв-07 (1)
    • Немогу скомпилировать, !*! zhukovia, 20:47 , 03-Янв-07 (2)
      >Проблема в том, что тебе также необходимо скомпилировать сам SDK, а не
      >только тестовый пример. Если в SDK есть Makefile, попробуй использовать make.
      >Если нет (что очень странно), попробуй скормить gcc все *.c файлы
      >вместе с temp.c.
      Макеашду есть и я сделал make all. Он что то компилировал насоздавал файлов с расширением *.o. Но компиляции temp.c так и не происходит даже в директории с SDK.


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

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

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

      • Немогу скомпилировать, !*! drioptr, 22:34 , 03-Янв-07 (8)
        • Немогу скомпилировать, !*! zhukovia, 22:55 , 03-Янв-07 (9)
          >>>Кстати, уверен что тебе нужно компилить с помощью 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-de...
          ---------------------конец----------------------------------

          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 $@
          ---------------------конец----------------------------------

        • Немогу скомпилировать, !*! zhukovia, 23:50 , 03-Янв-07 (10)
          >>>Кстати, уверен что тебе нужно компилить с помощью 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

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

          • Немогу скомпилировать, !*! drioptr, 02:03 , 04-Янв-07 (11)
            • Немогу скомпилировать, !*! zhukovia, 20:22 , 04-Янв-07 (12)
              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). Так и должно быть?
              • Немогу скомпилировать, !*! drioptr, 23:29 , 04-Янв-07 (13)
                • Немогу скомпилировать, !*! zhukovia, 18:10 , 06-Янв-07 (14)
                  >>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 пакета?

                • Немогу скомпилировать, !*! zhukovia, 18:13 , 06-Янв-07 (15)
                  Еще один вопрос. Как указать компилятору путь к каталогу с SDK? А то как то неудобно работать в каталоге с SDK.
  • Немогу скомпилировать, !*! zhukovia, 22:04 , 03-Янв-07 (7)
    Вот кусок 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-de...
    ---------------------конец----------------------------------

    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 $@
    ---------------------конец----------------------------------




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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