BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- C lip problem (http://www.black-board.net/thread.php?threadid=21583)


Geschrieben von daisuke am 04.12.2005 um 17:30:

  lip problem

Ich habe ein Problem mit der lip-library. (die ist zum programmieren mit sehr großen Zahlen gedacht)

Das ist mein code (den ich im übrigen nur aus der readme kopiert hab...):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        #include "lip.h"
        main()
        {
                verylong a = 0;
                verylong b = 0;
                verylong c = 0;

                zread(&a);      /* read a from stdin */
                zread(&b);      /* read b from stdin */
                zmul(a, b, &c); /* multiply a and b, put result in c */
                zwriteln(c);    /* print c, followed by a newline */
        }


und das ist der debug:

cd '/home/I856/baba/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k
gmake all-recursive
Entering directory /home/I856/baba/debug
Making all in src
Entering directory /home/I856/baba/debug/src
compiling fi (gcc)
/home/I856/baba/src/baba.c:40:10: warning: no newline at end of file
linking baba (libtool)
linking baba (gcc)
baba.o(.text+0x39): In function `main':
/home/I856/baba/src/baba.c:36: undefined reference to `zread'
baba.o(.text+0x48):/home/I856/baba/src/baba.c:37: undefined reference to `zread'
baba.o(.text+0x5f):/home/I856/baba/src/baba.c:38: undefined reference to `zmul'
baba.o(.text+0x6e):/home/I856/baba/src/baba.c:39: undefined reference to `zwriteln'

collect2: ld returned 1 exit status
Leaving directory /home/I856/baba/debug/src
gmake[2]: *** [baba] Error 1
gmake[2]: Target `all' not remade because of errors.
Entering directory /home/I856/baba/debug
gmake[2]: Nothing to be done for `all-am'.
Leaving directory /home/I856/baba/debug
gmake[1]: *** [all-recursive] Error 1
Leaving directory /home/I856/baba/debug
gmake: *** [all] Error 2
*** Exited with status: 2 ***

Ich arbeite mit KDevelop unter fedora core.

Kann mir jemand weiterhelfen



Geschrieben von Compuholic am 04.12.2005 um 18:55:

 

Sieht für mich irgendwie nach einem Linker-Fehler aus.

Hast du dem Linker mitgeteilt, daß wo er die Bibliotheken findet? Wo mandas bei KDevelop machen kann, weiß ich leider nicht. Aber ich bin sicher, daß es irgendwo Linker-Optionen gibt.



Geschrieben von Black Star am 04.12.2005 um 22:12:

 

Du wirst die Bibliothek brauchen. Hast du diese lip-Bibliothek installiert (z.B. liblip-devel oder sowas) oder hast du nur die Header-Datei in das Verzeichnis kopiert und eingebunden?

Wenn du es installiert hasts, dann kannst du die lip.h mit <lip.h> (<> statt "") einbinden.
Ausserdem wirst du die lip-libs brauchen. Das Wahrscheinlichste ist dann, dass du -llip als Linker-Option brauchst.

Dazu gehst du im Automake-Manager auf das Target, das du linken willst, gehst auf Options, dann auf Libraries dann bei dem unteren Fenster auf Add und packst -llip dazu.
Alternativ kannst du auch das passende Makefile.am editieren.



Geschrieben von daisuke am 05.12.2005 um 18:50:

 

Ich hab nur die header kopiert und eingebunden.
Ich bekomm die lip-Bibliothek nicht installiert....
In dem Ordner befinden sich 3 Dateien: lip.h,lippar.h und lip.c.
Ich hab also mit gcc aus der lip.c eine lip.o gemacht,danach hab ich das ganze in eine lip.a gepackt.
Diese Datei hab ich dann in /usr/lib kopiert.
wenn ich jetzt im Automakemanager "-llip" hinzufüge wird die datei nicht gefunden?!

EDIT:
ok,erst das Gehirn einschalten,dann posten.
Die Sache mit -llip funst jetzt. Das Problem besteht allerdings weiterhin (gleicher debug).



Geschrieben von Black Star am 05.12.2005 um 19:22:

 

Die Datei muesste liblip.a heissen, damit -llip funzt. Ein ldconfig koennte auch nicht schaden.
Aber ich fuerchte, das ist zu kompliziert.
Wenn es wirklich nur die 3 Dateien sind, binde sie in dein Projekt mit ein.
In den beiden .c-Datein werden die Funktionsruempfe fuer die lip.h stehen. Also fueg sie einfach deinem Projekt hinzu und es sollte laufen.
Das -llip muss dann natuerlich wieder raus.



Geschrieben von daisuke am 05.12.2005 um 21:05:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
jk.o(.text+0xdf9c): In function `zfread':
/usr/include/lip.c:7165: undefined reference to `log'
jk.o(.text+0xdfb6):/usr/include/lip.c:7165: undefined reference to `log'
jk.o(.text+0xe2eb): In function `zfwrite_c':
/usr/include/lip.c:7244: undefined reference to `log'
jk.o(.text+0xe305):/usr/include/lip.c:7244: undefined reference to `log'
jk.o(.text+0xeea5): In function `zhsread':
/usr/include/lip.c:7690: undefined reference to `log'
jk.o(.text+0xeebf):/usr/include/lip.c:7690: more undefined references to `log' follow
collect2: ld returned 1 exit status


das spuckt er jetzt raus.

Ich hab einfach die gesammte lip.c includiert und die beiden .h´s auch.

(es kann doch nicht so schwer sein das zum laufen zu kriegen)



Geschrieben von Black Star am 05.12.2005 um 21:16:

 

Nein.
Die c.-Dateien werden nicht per include eingebaut.
Die muessen kompiliert und mit gelinkt werden.
Wenn du sie in KDevelop zu deinem Projekt hinzufuegst, wird KDevelop sie in der Makefile.am eintragen und sie werden mit kompiliert und mit gelinkt. Dann sollte alles gehen.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH