I’m trying to statically link libxml2 to my project but ran into some trouble. I have built libxml2 as a static library.
This is my libxml.json file
{
"TargetString": "i686-pc-windows-msvc",
"Version": "2.9.5",
"SDKVersionString": "libxml2-win32-2.9.5",
"Imports": [
{
"Name": "libxml2",
"ForcedNamespace": "libxml",
"Files": [ "libxml/HTMLtree.h", "libxml/HTMLparser.h", "libxml/xpath.h", "libxml/xpathInternals.h", "libxml/xmlerror.h" ],
"IndirectFiles": [ "libxml/*.h" ],
"DepLibs": [ "libxml2_a.lib", "kernel32.lib", "Ws2_32.lib", "zlib.lib", "ucrt.lib" ]
}
],
"Platform": "Windows"
}
And this is the HeaderImport command I ran
HeaderImporter.exe import --json "C:\Users\X\Documents\Visual Studio 2015\Projects\SilverIsland\libxml2\libxml.json" --libpath="C:\Users\X\Documents\Visual Studio 2015\Projects\SilverIsland\libxml2\lib" -x "C:\Program Files (x86)\RemObjects Software\Elements\Island\Reference Libraries\Windows\i386" -i "C:\Users\X\Documents\Visual Studio 2015\Projects\SilverIsland\libxml2\include" -i "C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt" -i "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include" -o "C:\Users\X\Documents\Visual Studio 2015\Projects\SilverIsland\libxml2\lib"
Now when I build the project I get these errors
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: ___stdio_common_vsprintf in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _free in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _malloc in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _realloc in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: __errno in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _getenv in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _exit in (import) and in (import)
C:\Program Files (x86)\MSBuild\RemObjects Software\Elements\RemObjects.Elements.Island.Windows.targets(84,5): error : C:\Program Files (x86)\RemObjects Software\Elements\Bin\lld.exe: error: duplicate symbol: _strtoul in (import) and in (import)
Done building project "SilverIsland.elements" -- FAILED.
I did a little digging and it seems that malloc, free, getenv, etc. are exported by both ucrt.lib(C Run-time Library) and Island.lib. Hence the duplicate symbol error. So is there any solution to this?