Christian Kruse: C-Bibliothek in C++ benutzen

Beitrag lesen

你们好,

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/