automake + libtool + c ++ = очень раздутый интерфейс - PullRequest
5 голосов
/ 13 февраля 2011

Сначала у меня есть "include_HEADERS =" мои публичные заголовки "и" libfoobar_la_SOURCES = "частные источники" "частные заголовки" ".Все хорошо.Это скомпилировать / установить / ссылку.Но когда я делаю «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*)
...

Это никогда не объявляется ни в каком заголовке.

Я прочитал руководство automake / libtool дважды, но я не знаю, как убрать это дерьмо из интерфейса?Или что может выставить эту хрень на публичный API.Как контролировать то, что экспортируется в публичный API?

Ответы [ 2 ]

8 голосов
/ 13 февраля 2011

Найдите опцию libtool -export-symbols. Дайте ему список символов, которые вы хотите экспортировать. По умолчанию libtool экспортирует все символы.

3 голосов
/ 13 февраля 2011

Если вы любите приключения и можете быть уверены, что вы компилируете с достаточно новым GCC (я думаю, что для хорошей поддержки требуется ≥4.2), visibility может помочь.

Ограничить видимость по умолчанию (-fvisibility=hidden) и явно пометить функции, которые вы хотите экспортировать, __attribute__((visibility("default"))).

...