我需要静态构建和链接 Xerces-C(3.2.5/最新)和 Xalan-C(1.12/最新)库。
Xerces 3.2.5 是静态构建的,没有任何问题。 我只是像这样运行 CMake 命令:
cmake . -A Win32 -DBUILD_SHARED_LIBS:BOOL=OFF
它生成了 VS 项目,然后我运行
cmake --build . --clean-first --config Release
它就建成了。
但不幸的是 Xalan-C 的静态构建失败了。 :-(
我创建了一个这样的脚本:
set BuildCfgName=Release
set XERCES_ROOT=D:\libs\ApacheXML\xerces-c-3.2.5
set XercesC_LIBRARY=D:\libs\ApacheXML\libs\static\xerces-c_3.lib
set XercesC_INCLUDE_DIR=%XERCES_ROOT%\src
cmake . -A Win32 -DBUILD_SHARED_LIBS:BOOL=OFF -DXercesC_LIBRARY=%XercesC_LIBRARY% -DXercesC_INCLUDE_DIR=%XercesC_INCLUDE_DIR% -Dmessage-loader=inmemory
然后在 VS 2012 中打开它并尝试构建,但它失败并出现很多错误,如下所示:
Error 51 error C2491: 'xalanc_1_12::XalanDOMInit::s_initCounter' : definition of dllimport static data member not allowed D:\libs\ApacheXML\xalan_c-1.12\src\xalanc\XalanDOM\XalanDOMInit.cpp 27
[...]
Error 88 error C2491: 'xalanc_1_12::TranscodeToLocalCodePage' : definition of dllimport function not allowed D:\libs\ApacheXML\xalan_c-1.12\src\xalanc\XalanDOM\XalanDOMString.cpp 1085
[...]
Error 93 error C2491: 'xalanc_1_12::TranscodeFromLocalCodePage' : definition of dllimport function not allowed D:\libs\ApacheXML\xalan_c-1.12\src\xalanc\XalanDOM\XalanDOMString.cpp 1211
我检查了 VS2012 IDE 中的所有编译器和链接器设置的项目属性 - 我找不到任何可能影响它的内容。 :-\
您能否提供建议 - 是否可以静态构建 Xalan-C 1.12? 或者构建配置是否存在错误?
因为在“src \ xalanc \ Include \ PlatformDefinitions.hpp”中我看到了这个:
#if defined(_MSC_VER) //<- this part is actual for compiling
#define XALAN_PLATFORM_EXPORT __declspec(dllexport)
#define XALAN_PLATFORM_IMPORT __declspec(dllimport)
#define XALAN_PLATFORM_EXPORT_FUNCTION(T) XALAN_PLATFORM_EXPORT T
#define XALAN_PLATFORM_IMPORT_FUNCTION(T) XALAN_PLATFORM_IMPORT T
#else
#define XALAN_PLATFORM_EXPORT
#define XALAN_PLATFORM_IMPORT
#define XALAN_PLATFORM_EXPORT_FUNCTION(T) T XALAN_PLATFORM_EXPORT
#define XALAN_PLATFORM_IMPORT_FUNCTION(T) T XALAN_PLATFORM_IMPORT
#endif
据我了解,这些定义看起来是错误的......
因此,乍一看 - Xalan-C 1.12 不可能静态构建。
但也许我错过了什么?... 可以请您指教吗?
因此,“MRE 场景”如下:
1.1) 解压到“D:\libs\ApacheXML\xerces-c-3.2.5”
1.2)创建cmk.cmd脚本(见上文)
1.3)使用 CMake 或 VS 构建它(我尝试了 VS2012 和 VS2022 - 两者都适用于 Xerces-C 静态库构建)
2.1) 解压到“D:\libs\ApacheXML\xalan_c-1.12”
2.2) ...等等
据发现 - 我只需要更改 XALAN 中的 2 个头文件即可使 Windows 上的静态构建正常工作:
在这两个文件中我只需要注释掉
__declspec(dllimport)
代码,如下所示:/* __declspec(dllimport) */
。
至此XALAN 1.12静态版本就构建成功了。然后我可以将其链接到我的测试应用程序并且它可以正常工作。