Kira
Kira

Reputation: 1207

Tinyxml - Link errors when targeting x64 platform

I'm using tinyxml library for parsing XML files in my project. When I try to target x64 platforms I get LINKER errors and here is one fo them:

Error 4 error LNK2001: unresolved external symbol "private: static struct TiXmlString::Rep TiXmlString::nullrep_" (?nullrep_@TiXmlString@@0URep@1@A) ClassThatUsesTinyXML.obj

Update : I figured that the x64 version of tinyxml was not installed but when I tried to build the library for x64 platforms I got this error :

LNK1561: entry point must be defined

Upvotes: 8

Views: 5373

Answers (3)

Patrick
Patrick

Reputation: 31

The errors occurs when you define TIXML_USE_STL for the compilation of the library, but not for the sources that link to the library. The end result is that the library is compiled with different code from the sources using the library.

Upvotes: 3

Kira
Kira

Reputation: 1207

Instead of building tinyxml for x64 platforms and then adding tinyxml.h and tinystr.h to the project, I just added all the library files including the .cpp files and now I can target x64 platforms, the library is, in fact, being built when I build the whole project.

Upvotes: 6

Daniel Trebbien
Daniel Trebbien

Reputation: 39218

It does not look like tinyxml supports shared library builds out of the box.

Here are the steps that I followed to build a DLL from the tinyxml 2.6.2 sources:

  1. Open the provided SLN file, tinyxml.sln, in MS Visual Studio Express 2012 for Windows Desktop. Elect to convert the old project files to the new format when prompted.
  2. From "Solution Platforms", select "Configuration Manager..."
  3. From "Active solution platform:" select "<New...>"
  4. In "Type or select the new platform:" select "x64" if not already selected. Make sure to copy settings from the "Win32" configuration. Click OK. Click Close to exit the Configuration Manager.
  5. Right click on the tinyxml project in Solution Explorer. Select "Properties".
  6. For "Configuration:", select "All Configurations". Similarly, for "Platform:" select "All Platforms".
  7. On the Configuration Properties → General page, change "Configuration Type" to "Dynamic Library (.dll)". Change "Target Extension" to ".dll". Click OK to exit the tinyxml Properties Pages dialog.
  8. Select the "Release" configuration and "x64" platform.
  9. Right click on the tinyxml project in Solution Explorer again and select "Rebuild".

Within tinyxml_2_6_2\tinyxml\x64\Release you will find tinyxml.dll, but no import library (tinyxml.lib). This is because no symbols are exported. See How do I build an import library (.lib) AND a DLL in Visual C++?

If you want to go the shared library route, you will need to export the desired symbols via the MSVC-specific __declspec(dllexport) modifier. See Symbol Visibility in Windows.

Upvotes: 3

Related Questions