Domanda

Per prima cosa ho "Include_headers = 'My Public Headers'" e "libfoobar_la_sources = 'Fonti private' 'Private Headers'". Va tutto bene. Compila/installa/collegamento. Ma quando faccio "nm -c my_instaed_lib.so" ottengo:

00005be0 T yyget_debug(void*)
00005b00 T yyget_extra(void*)
00005bf0 T yyset_debug(int, void*)
00005bb0 T yyset_extra(FM4::LexImpl*, void*)
00005b40 T yyget_column(void*)
00005b10 T yyget_lineno(void*)
00006180 T yyset_column(int, void*)
000061e0 T yyset_lineno(int, void*)
...

Questo non ha mai dichiarato in nessun colpo di testa.

000091f0 T FM4::PrcImpl::CollectMacro()
000089d0 T FM4::PrcImpl::CollectQuote()
00008870 T FM4::PrcImpl::CollectComment()
00009350 T FM4::PrcImpl::Collect()
000093f0 T FM4::PrcImpl::Process()
00008700 T FM4::PrcImpl::PrcImpl(FM4::Processor*)
00008590 T FM4::PrcImpl::PrcImpl(FM4::Processor*)
00009970 W FM4::PrcImpl::~PrcImpl()
00009a00 W FM4::PrcImpl::~PrcImpl()
...

Questo in intestazione privata non installata.

Ho letto due volte il manuale di Automake/Libtool, ma non so come questa schifezza dall'interfaccia? O cosa può esporre questa merda all'API pubblica. In che modo il controllo ha esportato all'API pubblica?

È stato utile?

Soluzione

Cerca l'opzione Libtool -export-symbols. Dagli un elenco di simboli che vuoi esportare. Per impostazione predefinita, Libtool esporta tutti i simboli.

Altri suggerimenti

Se sei avventuroso e puoi essere sicuro che stai compilando con un GCC abbastanza nuovo (penso che ≥4,2 sia necessario per un buon supporto), visibilità può aiutare.

Limitare la visibilità predefinita (-fvisibility=hidden) e segnare esplicitamente le funzioni con cui si desidera esportare __attribute__((visibility("default"))).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top