Seltsames problem beim Compilieren mit Libraries

Diskutiere Seltsames problem beim Compilieren mit Libraries im C/C++ Forum im Bereich Programmieren unter Linux/Unix; libtest.c: #include <stdio.h> #include "libtest.h" void runTest() { printf("Test\n"); } libtest.h: #ifndef _LIBTEST_H_ #define _LIBTEST_H_ void...

  1. #1 guy_next_door, 18.01.2008
    Zuletzt bearbeitet: 18.01.2008
    guy_next_door

    guy_next_door Grünschnabel

    Dabei seit:
    18.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    libtest.c:
    Code:
    #include <stdio.h>
    #include "libtest.h"
    void runTest()
    {
    printf("Test\n");
    }
    
    libtest.h:
    Code:
    #ifndef _LIBTEST_H_
    #define _LIBTEST_H_
    void runTest();
    #endif
    
    test.C:
    Code:
    #include "libtest.h"
    int main(){
    runTest();
    }
    
    Wenn ich das ganze kompilieren will:
    gcc - fPIC -c libtest.c
    ld -shared -soname libtest.so -o libtest.so -lc libtest.o
    g++ -L. -Wall test.C -ltest -o test
    bei der dritten Zeile die Fehlermeldung:
    /tmp/cc8YTDWO.o: In function `main':
    test.C:(.text+0x5): undefined reference to `runTest()'
    collect2: ld returned 1 exit status

    nm libtest.so ergibt:
    0000000000200ea8 a _DYNAMIC
    0000000000200fe8 a _GLOBAL_OFFSET_TABLE_
    0000000000201008 A __bss_start
    0000000000201008 A _edata
    0000000000201008 A _end
    U puts@@GLIBC_2.2.5
    0000000000000328 T runTest

    g++ bzw. gcc Version ist 4.2.1
    GNU ld Version ist 2.17.50.0.5
    Das ganze läuft unter OpenSuse 10.2
     
  2. #2 pferdefreund, 18.01.2008
    pferdefreund

    pferdefreund Doppel-As

    Dabei seit:
    26.12.2007
    Beiträge:
    144
    Zustimmungen:
    0
    g++ ist doch der c++ compiler - ne lib mache ich immer so... Funktioniert ohne Probleme

    gcc -O3 -shared -o libpferd.so intconv.o readline.o decimal2.o nullweg.o \
    datum.o datumformat.o abbruch.o nonewline.o unstring.o mvc.o readpipe.o \
    inspect.o werbistdu.o readhigh.o printdez.o umsetzuc.o holpid.o umstvnr.o makewords.o \
    schaltjahr.o monatsletzter.o webcharumsetz.o
    strip -s libpferd.so

    Die einzelnen Objekte
    decimal2.o: decimal2.c
    gcc -O3 -fpic -c -o decimal2.o decimal2.c
     
  3. #3 guy_next_door, 18.01.2008
    guy_next_door

    guy_next_door Grünschnabel

    Dabei seit:
    18.01.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Ups, hatte ich vergessen zu schreiben: Ich möchte eine mit gcc kompilierte Library in ein C++ Projekt einbinden. Da ich bisher vor allem unter Windows programmiert habe, und ich bisher wenig Linux/Unix Erfahrung habe, habe ich obiges Beispiel geschrieben, bei dem der gleiche Fehler, auftritt. Vielleicht hätte ich auch besser fragen sollen wie binde ich eine C Library in C++ ein?
     
  4. #4 Hans Dampf, 20.01.2008
    Zuletzt bearbeitet: 20.01.2008
    Hans Dampf

    Hans Dampf Jungspund

    Dabei seit:
    19.01.2008
    Beiträge:
    20
    Zustimmungen:
    0
    Hier wurden C und C++ unzulässig vermischt. Dein nm-Aufruf zeigt, daß in der 'text section' bei Adresse '328h' die Funktion 'runTest' vorliegt.

    Probier mal
    g++ -c -o test.o test.C
    nm test.o

    Der C++-Compiler erzeugt für den Aufruf der 'runTest'-Funktion die Signatur '_Z7runTestv' - und das ist, was der Linker später erfolglos suchen wird.

    Schau mal nach unter [32.4] bei
    http://geneura.ugr.es/~jmerelo/c++-faq/mixing-c-and-cpp.html

    Diese Präprozessor-Anweisungen bereitet den C++-Compiler darauf vor, für die runTest-Funktion einen C-Aufrufnamen zu erzeugen.

    p.s.: Ich bin hier noch neu und suche die Anleitung, wie man diese interessanten Hervorhebungen, die Du für den Quellcode verwendet hast, erzeugt.
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    - Ich hätte mir den Editor mal genauer ansehen sollen...

    Code:
    #ifndef _LIBTEST_H_
    #define _LIBTEST_H_
    
    #ifdef __cplusplus
      extern "C" {
    #endif
    
    void runTest();
    
    #ifdef __cplusplus
      }
    #endif
    
    #endif /*_LIBTEST_H_*/
    
     
Thema:

Seltsames problem beim Compilieren mit Libraries

Die Seite wird geladen...

Seltsames problem beim Compilieren mit Libraries - Ähnliche Themen

  1. Seltsames ACPI/Akkuproblem

    Seltsames ACPI/Akkuproblem: Hallo Leute, habe ein komisches Problem auf meinem Acer TimelineX 4820TG: (Das installierte System ist übrigens ZevenOS Neptune 2.0, also ein...
  2. Seltsames Berechtigungsproblem

    Seltsames Berechtigungsproblem: Hallo, kann mir das einer erklären ?( Ich habe einen User (operating) in RHEL 5.2 angelegt, ganz normal mit dem Befehl 'useradd' + passwort...
  3. Seltsames Problem mit Samba: Ein Ordner geht, der andere nicht

    Seltsames Problem mit Samba: Ein Ordner geht, der andere nicht: Hallo ! Ich hab auf meinem Rechner 2 Ordner freigegeben. Einmal "/netzwerk" und "/home/ich/Musik" Beide haben in der smb.conf genau die gleichen...
  4. Kubuntu 7.04 noch ein seltsames Wlan-Problem

    Kubuntu 7.04 noch ein seltsames Wlan-Problem: Kann mit Kubuntu jetzt auf meine Fritbox zugreifen aber nur mit der IP der Namen ist nicht aufzulösen. Auch Internetseiten lassen sich anpingen,...
  5. seltsames Proxy/Internetgateway Problem

    seltsames Proxy/Internetgateway Problem: Hallo, Ich habe einseltsames Problem mit einem Proxy und vielleicht kann mir ja hier jemand helfen. Ich und ein Arbeitskollege haben vor...