Christian Kruse: C-Bibliothek in C++ benutzen

你们好,

ich habe folgendes Problem: vor einiger Zeit habe ich eine
HTML-Template-Bibliothek in C geschrieben. Die will ich nun in einem
C++-Programmbibliothek, die ich entwickle, benutzen. Die Header-Files der
Template-Bibliothek enthalten alle

  
#ifdef __cplusplus  
extern "C" {  
#endif  
  
// ... Definitionen  
  
#ifdef __cplusplus  
}  /* End of the 'extern "C"' block */  
#endif  

Ich benutze die Autotools, um die Makefile automatisch generieren zu
lassen; die Bibliothek heisst libblblogmanagement. Der LIBADD-Eintrag in
der Makefile.am sieht so aus:

  
libblblogmanagement_la_LIBADD=-lsqlite3 -ltemplate  

Wie ihr seht, benutze ich ausserdem noch die libsqlite3. Die funktioniert
auch einwandfrei... aber wenn ich jetzt die Template-Bibliothek benutze,
bekomme ich folgende Fehlermeldung:

  
./.libs/libblblogmanagement.so: undefined reference to `tpl_error_message(s_template*)'  
./.libs/libblblogmanagement.so: undefined reference to `tpl_new_template(s_template*, char const*)'  
./.libs/libblblogmanagement.so: undefined reference to `tpl_evaluate(s_template*, _IO_FILE*)'  

Interessant ist, was ldd sagt:

  
ckruse@skuld src $ ldd .libs/libblblogmanagement.so  
        linux-gate.so.1 =>  (0xffffe000)  
        libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0xb7f6b000)  
        libtemplate.so.0 => /usr/local/lib/libtemplate.so.0 (0xb7f51000)  
        libstdc++.so.5 => //usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libstdc++.so.5 (0xb7e94000)  
        libm.so.6 => /lib/libm.so.6 (0xb7e71000)  
        libc.so.6 => /lib/libc.so.6 (0xb7d5d000)  
        libgcc_s.so.1 => //usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5-20050130/libgcc_s.so.1 (0xb7d55000)  
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7d41000)  
        /lib/ld-linux.so.2 (0x80000000)  
ckruse@skuld src $  

Die Bindung an die libblblogmanagement.so geschieht also anscheinend
problemlos. Erst, wenn die Bibliothek an das Programm gebunden werden
soll, kommt es zu diesen Fehlern. Hat einer eine Idee, wie das sein kann?
Was führt zu diesem Fehler und wie kann ich ihn vermeiden?

再见,
克里斯蒂安

--
89,7% aller Statistiken sind frei erfunden!
http://wwwtech.de/
  1. 你们好,

    ich habe den Fehler gefunden: ich hatte eine alte Installation der
    libtemplate in /usr/local. Die hatte wohl mehr vorrang als die Installation
    in /usr/... ;-)) Also: es geht jetzt, danke für die Mühe, die evntl.
    aufgebracht wurde.

    再见,
    克里斯蒂安

    --
    Sei ε kleiner Null.
    http://wwwtech.de/
    1. Hallo Christian.

      Also: es geht jetzt, danke für die Mühe, die evntl.
      aufgebracht wurde.

      Da ist es schon so selten, mal einen eigenen Thread von dir zu lesen und dann löst du das Problem auch gleich noch selbst. ;-)

      Gruß, Ashura

      --
      Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Day 19: Notes
      Meine Browser: Opera 8.01 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
      [Deshalb frei! - Argumente pro freie Software]
      1. 你好 Ashura,

        Da ist es schon so selten, mal einen eigenen Thread von dir zu lesen und
        dann löst du das Problem auch gleich noch selbst. ;-)

        Hehe, tut mir leid, das nächste mal halte ich mich zurück *g*

        再见,
        克里斯蒂安

        --
        Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
        http://wwwtech.de/
    2. Hi,

      ich habe den Fehler gefunden: ich hatte eine alte Installation der
      libtemplate in /usr/local. Die hatte wohl mehr vorrang als die Installation
      in /usr/... ;-)) Also: es geht jetzt, danke für die Mühe, die evntl.
      aufgebracht wurde.

      Kontrollier mal die Umgebungsvariablen LIB, LIBINC, INCLUDE usw.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. 你好 MudGuard,

        Kontrollier mal die Umgebungsvariablen LIB, LIBINC, INCLUDE usw.

        Die sind schon richtig gesetzt. Es ist ja gewünscht, dass /usr/local /usr
        überschreibt. Ich wusste halt nicht, dass da noch eine alte Version liegt :)

        再见,
        克里斯蒂安

        --
        Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.
        http://wwwtech.de/