automake+libtool+c++ = 非常臃肿的界面

发布于 2024-10-16 22:13:19 字数 963 浏览 5 评论 0 原文

首先,我有“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*)
...

这从未在任何标头中声明。

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 手册,但我不知道如何从界面中删除这些废话? 或者什么可以将这些垃圾暴露给公共 api。如何控制导出到公共 api 的内容?

First i have "include_HEADERS = 'my public headers'" and "libfoobar_la_SOURCES = 'private sources' 'private headers'". All is fine. It compile/install/link. But when i do "nm -C
my_instaed_lib.so" i get:

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

This never declared in any header.

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

This in private not installed header.

I read automake/libtool manual twice, but i don't know how strip this crap from interface?
Or what can expose this crap to public api. How control what exported to public api?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

合久必婚 2024-10-23 22:13:19

查找 libtool 选项 -export-symbols。为其提供要导出的符号列表。默认情况下,libtool 导出所有符号。

Look for the libtool option -export-symbols. Give it a list of symbols that you want to export. By default, libtool exports all symbols.

£噩梦荏苒 2024-10-23 22:13:19

如果您喜欢冒险,并且可以确定您正在使用足够新的 GCC 进行编译(我认为 ≥4.2 对于良好的支持是必要的),可见性可以提供帮助。

限制默认可见性 (-fvisibility=hidden) 并使用 __attribute__((visibility("default"))) 明确标记要导出的函数。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文