automake+libtool+c++ = 非常臃肿的界面
首先,我有“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 的内容?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查找 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.如果您喜欢冒险,并且可以确定您正在使用足够新的 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")))
.