Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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
C++ 应用程序中两个不同版本的库 考虑一个场景,其中有两个不同版本的共享库。考虑A.1,这样链接到B.SO和A.2,这样链接到C.SO。现在,B.so和C.so都链接到d.exe。当B.so想要调用A.1.so中的函数时,它最终调用了A.2.so中的函数。因此,它给出了未定义的行为_C++_C_Linux_Shared Libraries_Static Libraries - Fatal编程技术网

C++ 应用程序中两个不同版本的库 考虑一个场景,其中有两个不同版本的共享库。考虑A.1,这样链接到B.SO和A.2,这样链接到C.SO。现在,B.so和C.so都链接到d.exe。当B.so想要调用A.1.so中的函数时,它最终调用了A.2.so中的函数。因此,它给出了未定义的行为

C++ 应用程序中两个不同版本的库 考虑一个场景,其中有两个不同版本的共享库。考虑A.1,这样链接到B.SO和A.2,这样链接到C.SO。现在,B.so和C.so都链接到d.exe。当B.so想要调用A.1.so中的函数时,它最终调用了A.2.so中的函数。因此,它给出了未定义的行为,c++,c,linux,shared-libraries,static-libraries,C++,C,Linux,Shared Libraries,Static Libraries,现在我只想让我的B.so调用A.1.so。我只能修改A.1.so和B.so,其他什么都不能修改。使用dlopen()。在前面的堆栈溢出中给出了许多解决方案,但似乎什么都不起作用。请注意,我只能在A.1.so和B.so中进行代码更改 除了dlopen()之外,还有其他解决方案吗。我已经提到了下面的一些链接 能否将A1.cpp中的所有代码包装在命名空间A1中,并使用命名空间A1将添加到B.cpp? 我所说的A1.cppanB.cpp是指A1.so和B.so的所有相关翻译单位,你能把

现在我只想让我的B.so调用A.1.so。我只能修改A.1.so和B.so,其他什么都不能修改。使用
dlopen()。在前面的堆栈溢出中给出了许多解决方案,但似乎什么都不起作用。请注意,我只能在A.1.so和B.so中进行代码更改

除了
dlopen()
之外,还有其他解决方案吗。我已经提到了下面的一些链接


能否将
A1.cpp
中的所有代码包装在
命名空间A1
中,并使用命名空间A1
添加到
B.cpp

我所说的
A1.cpp
an
B.cpp
是指
A1.so
B.so
的所有相关翻译单位,你能把A.1.so重命名为MyA.1.so吗?链接到B.那么?(很明显,你需要重命名库公开的符号以匹配)@sanderedycker我试过了,但没有成功,即使库名不同,库中的函数名也是相同的same@SanderDeDycker我试过了——默认的symver,它不起作用,也许我犯了一些错误,但它不起作用。只需在所有外部符号(代码中)的前面加上
my