5

まず、「include_HEADERS = 'my public headers'」と「libfoobar_la_SOURCES = 'private sources' 'private headers'」があります。すべて良好。コンパイル/インストール/リンクします。しかし、「nm -C my_instaed_lib.so」を実行すると、次のようになります。

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

これは、どのヘッダーでも宣言されていません。

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

これはプライベートではインストールされていないヘッダーです。

automake/libtool のマニュアルを 2 回読みましたが、インターフェイスからこのがらくたを削除する方法がわかりません。または、このがらくたを公開APIに公開できるものは何ですか。パブリック API にエクスポートされたものをどのように制御しますか?

4

2 に答える 2

8

libtool オプションを探します-export-symbols。エクスポートするシンボルのリストを指定します。デフォルトでは、libtool はすべてのシンボルをエクスポートします。

于 2011-02-13T06:12:15.413 に答える
3

If you're adventurous, and can be sure that you're compiling with a new enough GCC (I think ≥4.2 is necessary for good support), visibility can help.

Restrict the default visibility (-fvisibility=hidden) and explicitly mark the functions you want to export with __attribute__((visibility("default"))).

于 2011-02-13T10:21:26.787 に答える