Linux相当于Windows DLL转发器或MacOS reexport_library
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux相当于Windows DLL转发器或MacOS reexport_library,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1502字,纯文字阅读大概需要3分钟。
内容图文
我有一个共享库,试图提供一个标准化的接口,基本上是一个功能列表.其中一些功能已由另一个共享库提供.因此,我可以编写其他功能,并要求用户链接到两个库,即让他这样做:
g++ foo.c -lmine -lother
为了使用户更轻松,我不想这样做. (鉴于我所处的情况,这比在某些脚本中添加标志要复杂得多.)我希望用户仅链接到我的库,并从其他库中获取功能.
在Windows中,我可以使用DLL转发器,并简单列出要重新导出的功能.在MacOS中,我可以使用–reexport_library链接器选项来使我的库假装包含另一个库.如果我不介意创建另一个库的完整副本并使用静态版本,则可以使用–whole-archive将其整体导入我的库中.
但是在Linux中,有什么方法可以给我的库的导出表一个条目说“此函数在那边的另一个库中”?
或者,我可以对我的库做些什么,使它提供给链接器时,链接器会说:“哦,我也需要拉入另一个库”? –rpath-link选项的文档建议这样做应该可以,但不能.当然,libtool可以做到这一点,但是libtool并不是一个选择.
我当然可以做的就是在我的库中填充这些功能的小存根,但我宁愿不这样做.只是必须以正确的顺序进行重命名,以使链接器在正确的时间选择正确的版本,这真是令人讨厌.但是,如果真的没有其他方法,那么继续进行此操作的任何帮助也将不胜感激.
解决方法:
StackOverflow之外的人给了我解决问题的方法.
.so文件不必是实际的ELF文件.它也可以是链接描述文件.链接描述文件是一个文本文件,其中包含链接描述.就我而言,脚本非常简单.我只是将这个文本文件安装为libmine.so:
INPUT ( /install/prefix/lib/libmine.so.1 -lother )
这指示链接器在命令行上出现libmine.so(或-lmine)的位置,以查找我的库(带有版本后缀,因此它将提取实际的ELF文件),然后搜索库路径对于其他图书馆.
然后,我只需在构建脚本中将/ install / prefix替换为实际配置的安装前缀,就可以了.
内容总结
以上是互联网集市为您收集整理的Linux相当于Windows DLL转发器或MacOS reexport_library全部内容,希望文章能够帮你解决Linux相当于Windows DLL转发器或MacOS reexport_library所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。