Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于Linux的Windows DLL转发器或MacOS再导出库_Linux_Linker_Shared Libraries - Fatal编程技术网

相当于Linux的Windows DLL转发器或MacOS再导出库

相当于Linux的Windows DLL转发器或MacOS再导出库,linux,linker,shared-libraries,Linux,Linker,Shared Libraries,我有一个共享库,它试图提供一个标准化的界面,基本上是一个函数列表。其中一些函数已经由另一个共享库提供。因此,我只需编写附加函数,并要求用户链接到两个库,即让用户执行以下操作: g++ foo.c -lmine -lother 但是,为了方便用户,我不想这样做。(考虑到我所处的情况,这比在某些脚本中添加标志要复杂得多。)我希望用户只针对我的库进行链接,并从其他库获取函数 在Windows中,我可以使用DLL转发器并简单地列出我想要重新导出的函数。在MacOS中,我可以使用--reexport\u

我有一个共享库,它试图提供一个标准化的界面,基本上是一个函数列表。其中一些函数已经由另一个共享库提供。因此,我只需编写附加函数,并要求用户链接到两个库,即让用户执行以下操作:

g++ foo.c -lmine -lother
但是,为了方便用户,我不想这样做。(考虑到我所处的情况,这比在某些脚本中添加标志要复杂得多。)我希望用户只针对我的库进行链接,并从其他库获取函数

在Windows中,我可以使用DLL转发器并简单地列出我想要重新导出的函数。在MacOS中,我可以使用
--reexport\u库
链接器选项使我的库假装包含另一个库。如果我不介意创建另一个库的完整副本,并且有一个静态版本,那么我可以使用
--whole archive
将其全部拉到我的库中

但是在Linux中有没有办法给我的库的导出表一个条目,上面写着“这个函数在那边的另一个库中”

或者,我可以对我的库做些什么,这样当它被提供给链接器时,链接器会说,“哦,我也需要拉入另一个库”?
--rpath链接
选项的文档表明,这应该是可行的,但事实并非如此。当然,libtool可以做到这一点,但libtool不是一个选项


当然,我能做的就是用这些函数的小存根填充我的库,但我不愿意。如果必须以正确的顺序重命名,以便链接器在正确的时间选择正确的版本,那么这将是非常烦人的。但是,如果真的没有其他办法,我们也将非常感谢您的帮助。

StackOverflow以外的人为我的问题提供了解决方案

所以文件不需要是实际的ELF文件。它也可以是链接器脚本。链接器脚本是包含链接器指令的文本文件。在我的例子中,脚本非常简单。我只是将此文本文件安装为
libmine.so

INPUT ( /install/prefix/lib/libmine.so.1 -lother )
这指示链接器在命令行中出现
libmine.so
(或
-lmine
)的位置查找我的库(带有版本后缀,因此它会拾取实际的ELF文件),然后在库路径中搜索其他


然后,我只需在构建脚本中用实际配置的安装前缀替换
/install/prefix
,就可以开始了。

Er。。如果
.so
-lsomething
链接,它将拉取此库。它是广泛使用的方法,例如libz等。。我不明白这个问题。用户代码可能直接引用了
-something
中的符号,如果
-lsomething
不在命令行上,链接器将不会接受。有没有办法在Windows上重新导出库中的所有符号,而不必包装每个符号?@Andrew我不知道,但是你为什么不把这当作一个真正的问题来问呢?我指的是这个问题和你相关的叮当声。