Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 如何静态链接xerces-c的两个版本(或任何相关的库)?_C++_Gcc_Static Linking_Xerces C - Fatal编程技术网

C++ 如何静态链接xerces-c的两个版本(或任何相关的库)?

C++ 如何静态链接xerces-c的两个版本(或任何相关的库)?,c++,gcc,static-linking,xerces-c,C++,Gcc,Static Linking,Xerces C,我知道这不是一件很干净的事情,但我该怎么做呢 基本上,我正在静态链接一个使用xerces-C2.7的第三方库,我想使用xerces-C3.1(用于2.x中没有的最新和最好的功能) 使用2.7的模块(由第三方库内部使用,并且从未暴露于我的代码中)与使用3.1的模块(在我的代码中)没有任何共同之处 有办法吗?我知道这不是一件好事,但想到提交库升级请求和实际完成之间的交付周期,我不寒而栗。也许至少几个月,我不想走上那条邪恶的道路 通用的独立于编译器的解决方案ofc会更好 除了“”中提到的解决方案之外,

我知道这不是一件很干净的事情,但我该怎么做呢

基本上,我正在静态链接一个使用xerces-C2.7的第三方库,我想使用xerces-C3.1(用于2.x中没有的最新和最好的功能)

使用2.7的模块(由第三方库内部使用,并且从未暴露于我的代码中)与使用3.1的模块(在我的代码中)没有任何共同之处

有办法吗?我知道这不是一件好事,但想到提交库升级请求和实际完成之间的交付周期,我不寒而栗。也许至少几个月,我不想走上那条邪恶的道路


通用的独立于编译器的解决方案ofc会更好

除了“”中提到的解决方案之外,另一个解决方案是通过将不同版本构建到不同的动态库中来隔离它们。最简单的方法可能是将使用xerces 3.1的代码移动到一个新的动态库中,并为其创建一个接口。由于您是针对Xerces进行静态链接,这将使引用保持在动态库的内部。您可能需要更改设置,以确保仅从动态库导出选定的函数名。

除了“”中提到的解决方案外,另一个解决方案是通过将不同版本构建到不同的动态库中来隔离它们。最简单的方法可能是将使用xerces 3.1的代码移动到一个新的动态库中,并为其创建一个接口。由于您是针对Xerces进行静态链接,这将使引用保持在动态库的内部。您可能需要更改设置,以确保仅从动态库导出选定的函数名。

我不久前在使用另一个库(libpng)时遇到了这个问题。如果您使用的是linux或类似的操作系统,请尝试查看我遇到的相同问题。但解决方案只涉及c。有没有想过它会对C++工作吗?这是C++的(我的项目是C++),我以前在这个问题上用了不同的库(LIPBPNG)。如果您使用的是linux或类似的操作系统,请尝试查看我遇到的相同问题。但解决方案只涉及c。有没有任何想法,它可以为C++工作?这适用于C++(我的项目是C++)