Seltsames problem beim Compilieren mit Libraries

Dieses Thema im Forum "C/C++" wurde erstellt von guy_next_door, 18.01.2008.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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
     
  4. #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?
     
  5. #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_*/
    
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
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...