Sto sviluppando una libreria di accesso a un dispositivo seriale per Linux e sto avendo dei problemi.

Essenzialmente la questione e' questa:
  • [LIB: C, APP: C] Se compilo come C sia la libreria sia l'applicazione, non ho problemi. Questo pero' mi costringe a rinunciare ad avere parametri con valori di default (come da discussione precedente: [link] ). L'unica "soluzione" per ora e' stato semplicemente commentare le funzioni che utilizzano parametri con default values. E' ovvio che e' solo una soluzione tampone.
  • [LIB: C++, APP: C] Se compilo come c++ la libreria, la libreria completa viene compilata correttamente. Notare che tutte le funzioni da esportare sono dichiarate cosi:

    extern "C" nomefunzione(par1, par2, ... parn [= NULL]);

    Compilando con il C standard l'applicazione, quando provo a caricare la libreria ottengo questo errore che non capisco (neanche googlando):

    Error while loading library: ../libtagreader.so: undefined symbol: __gxx_personality_v0
  • [LIB: CPP, APP: CPP] Se compilo anche l'applicazione che carica la libreria con il C++, ottengo questo:

    testapplication.cpp:19: undefined reference to `__gxx_personality_v0'

    La compilazione la faccio cosi':

    codice:
    # Compile test application
    gcc -Wall -g -c testapplication.cpp
    # Link
    gcc -g -o testapplication testapplication.o -ldl

Considerate che l'applicazione e' banalissima. Fa una dlopen, qualche dlsym e chiama una funzione di libreria. Tutto qui.

Non si capisce cosa sia questo _gxx_personality_v0. Qualcuno mi sa aiutare ?