Question

D'abord j'ai "include_HEADERS = 'mes en-têtes publics" et "libfoobar_la_SOURCES = 'privées' privée 'headers'".Tout est très bien.Il compiler/installer/lien.Mais quand je fais "nm -C my_instaed_lib.donc," j'obtiens:

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*)
...

Cela n'a jamais déclaré dans un en-tête.

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()
...

De tout cela en privé n'est pas installé d'en-tête.

J'ai lu automake/libtool manuel deux fois, mais je ne sais pas comment cette bande de merde à partir de l'interface?Ou ce qui peut exposer cette merde à l'api publique.Comment contrôler ce exportés vers l'api publique?

Était-ce utile?

La solution

Recherchez l'option libtool -export-symbols.Donner une liste de symboles que vous souhaitez exporter.Par défaut, libtool les exportations de tous les symboles.

Autres conseils

Si vous êtes aventureux, et pouvez être sûr que vous êtes la compilation avec une nouvelle assez GCC (je pense ≥4.2 est nécessaire pour un bon soutien), visibilité peut vous aider.

Restreindre la visibilité par défaut (-fvisibility=hidden) et de marquer explicitement les fonctions que vous souhaitez exporter avec __attribute__((visibility("default"))).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top