子程序用共享对象覆盖

时间:2016-01-26 10:32:42

标签: linux shared-libraries overwrite

我需要使用不同的编译选项编译两个版本的相同代码。在运行时,我的代码决定使用哪个版本。在Windows上,我通过静态链接到一个版本并动态链接到包含其他版本的ddl以及更改入口点名称的包装器来解决此问题。但是在Linux上我无法获得相同的行为。

问题在于: 我有一个可执行文件“X.exe”,其中包含符号“A”,但也链接到共享对象“B.so”。这个“B.so”还有一个符号“A”和一个叫“A”的符号“B”(B实际上是围绕另一个版本“A”的包装)。但问题是,当我在“X.exe”中调用“B”时,此“B”从“X.exe”调用“A”而不是“B.so”中的“A”。我试图限制可见性,但是当我这样做时,在“B.so”内部分配内存时出现错误。

此外,B.so还需要不同版本的多个第三方库,这些库可以是静态或动态链接的。

我如何在linux上编译和链接我的代码以获得与Windows相同的行为(即,所有内容首先在内部解析)?

0 个答案:

没有答案