2014-12-19 13 views
-3

我想将两个.so链接在一起。 情景是: 1)在.so 中定义了一个名称相同的方法(例如void fun())2)假设我们从第一个调用这个方法,那么调用应该去第二个.so中定义的方法如何在C/C++中链接两个.so

这怎么可能?

// Module 2 

#include <stdio.h> 
void fun(); 

void fun() 
{ 
    printf(""from 2nd .so\n""); 
} 


// Module 1 

#include <stdio.h> 
void fun(); 

void fun() 
{ 
    printf("from 1st .so\n"); 
} 

int main() 
{ 
    fun(); 
    return 0; 
} 
+0

在c是不可能的。在C++中,您可以覆盖函数,但是您必须传递不同的参数。 – LPs 2014-12-19 10:58:53

+3

你的'.so'中有'main()'入口点吗?那该怎么办? – 2014-12-19 10:59:35

回答

0
与名称

你会得到冲突,这是你必须在C++和你既然标有C++标签还你的问题的命名空间的原因之一,所以我想你可以用这种语言编译。共享库的延迟加载也是某种解决方案,但是您将不得不手动检查符号+依赖关系到由dlopen打开的库将不会显示ldd命令(或等效窗口)。您也可以点击这里提出的一些技巧:

linking two shared libraries with some of the same symbols

我希望你问到这个问题,只是因为您正在使用遗留代码和代码的工作,你发布的唯一的例子。你不应该故意这样做。

0

在给出的例子中不可能。当建立第二个.so时,对fun()的呼叫已解决。您无法重新解析通话。