Table of contents[Show/Hide]
- Common Build Errors
- Can't Find Files
- Unresolved External Symbols
- Other Errors
- fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
- LNK2005: <...> already defined in LIBCD.lib(osfinfo.obj)
- Linux build does not install plugins (all Linux distributions)
- Code::Blocks + MinGW: cannot find -lOgreMain_d
- error LNK2001: unresolved external symbol "protected: static class Ogre::ColladaManager * Ogre::Singleton<class Ogre::ColladaManager>::ms_Singleton"
- LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
- Further Resources
Common Build Errors
Can't Find Files
fatal error C1083: Cannot open include file: 'dx3d.h': No such file or directory
You must install the DirectX9 SDK. The DirectX runtime libraries that are often installed with games wont suffice. Download it from http://www.microsoft.com/directx.
fatal error LNK1104: cannot open file 'OgreMain.lib'
You must build Ogre before hand or have a prebuilt SDK. The path to the directory that contains ogremain.lib must be included in your linker directories in your IDE. Find the proper settings for your compiler and IDE in Installing An SDK - Shoggoth, Building From Source - Shoggoth or Setting Up An Application.
fatal error C1083: Cannot open include file: 'zlib.h': No such file or directory
You must download the dependencies package from the Ogre homepage and unzip it inside the ogrenew directory.
fatal error C1083: Cannot open include file: 'Cg/Cg.h': No such file or directory
If you are building Ogre with Cg support enabled (either by configure command option or by enabling the Cg plugin to build on Windows) then you need to get and install the Cg Toolkit from nVidia.
Unresolved External Symbols
LNK2001: unresolved external symbol "__declspec(dllimport) private: void * __thiscall Ogre::MemoryManager::op_new_sc(unsigned int,unsigned int)" (__imp_?op_new_sc@MemoryManager@Ogre@@AAEPAXII@Z)
You tried to link a release mode OgreMain.lib with a debug mode application. So make sure your application's debug configuration links against OgreMain_d.lib. This can be changed in your project properties under Linker->Input in the field Additional Dependencies.
LNK2019: unresolved external symbol "__declspec(dllimport) public: static class OIS::InputManager * __cdecl OIS::InputManager::createInputSystem(class ...
You need to link against OIS.lib or OIS_d.lib.
LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall Ogre::Root::Root(class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const &,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const &,class _STL::basic_string<char,class _STL::char_traits<char>,class _STL::allocator<char> > const &)" (__imp_??0Root@Ogre@@QAE@ABV?$basic_string@DV?$char_traits@D@_STL@@V?$allocator@D@2@@_ STL@@00@Z)
You need to link against OgreMain.lib or OgreMain_d.lib.
unresolved external symbol __imp__MessageBoxA@16 referenced in function _dError
Link user32.lib to your program.
d3dx9.lib(jcdctmgr.obj) : error LNK2001: unresolved external symbol ___security_cookie...
You're probably building with VC6. The newer versions of the DirectX SDK are build with VC2003.Net with an option VC6 doesn't have. You need the libs from the extra package. (For the 2004 October SDK look here). Replace the libs in this package with your current libs. To avoid problems when using VC6, it is recommend to use the Summer 2004 DirectX SDK.
LIBC.lib ... winMain@16
LIBC.lib(wincrt0.obj) error Unresolved External Symbol _winMain@16 referenced in function _winMainCRTStartUp
You created a Win32 project but didn't define WinMain as your entry point (you probably used main).
unresolved External Symbol "public: void __thiscall std::_String_base::Xran(void) const (?_XRan_String_Base_@st@@QBEXXZ) refereneced in function "public: class std::basic_string< char,struct std::char_traits<char>,class std::allocator<char> >
Add libcp.lib to the libraries you link against in your linker options.
fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
This is a problem with the VC6 compiler. Add the following to your compiler's command line options: /Zm800. Note the capital Z and lower case m. Do this for all affected projects. Apparently this was resolved with Ogre 0.15.2, but if you have to use a version older than this you can apply this patch.
LNK2005: <...> already defined in LIBCD.lib(osfinfo.obj)
Your libraries are mismatched: singlethreaded/multithreaded/multithreaded dll. Check your compiler options to make sure you are using 'Multithreaded Debug DLL' (or /MDd) for debug builds and 'Multithreaded DLL' (or /MD) for release builds. (MSVC: in project settings under C++ > Code Generation).
Linux build does not install plugins (all Linux distributions)
You must run "bootstrap" before running "configure" even for tarball distributions. "bootstrap" runs the "libtoolize" step that instructs libtool how to build and install the shared plugin libraries. The proper sequence for Linux builds is "sh bootstrap" then "configure" then "make" then "make install". Also, distcc probably will not work with full Ogre builds because self-dependencies exist in the full build (building only OgreMain can run with distcc).
Code::Blocks + MinGW: cannot find -lOgreMain_d
During the link stage you get a link error message that -lOgreMain_d or -lOgreMain could not be found. If this occured just after installing Code::Blocks and building the Ogre demos then check the Code Blocks Compiler Setup.
If the Ogre samples build ok and you are getting the link error message when building your own app then check that the linker directory paths in the project target build options has an entry for where OgreMain.dll(Release build) or OgreMain_d.dll(Debug build) can be found.
error LNK2001: unresolved external symbol "protected: static class Ogre::ColladaManager * Ogre::Singleton<class Ogre::ColladaManager>::ms_Singleton"
This message can appear if you use an old plugin like ogrecollada with Ogre 1.8+. To fix this problem you just have to add a version switch to the code:
#if (OGRE_VERSION < ((1 << 16) | (8 << 8))) template<> ColladaManager* Singleton<ColladaManager>::ms_Singleton = 0; #else template<> ColladaManager* Singleton<ColladaManager>::msSingleton = 0; #endif
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
Install of .Net 4.5 can break Visual Studio 2010 C/C++ resource file compilation. Visual Studio SP1 fixes the issue. Maybe you have to reinstall the SP1 again.
For strange errors that crop up in your programs, you may be suffering from Heap Corruption which stems from using invalid pointers in one way or another.
If you get heap corruption crashes in Debug versions only and if not all .cpp files of your project include ogre, make sure OGRE_DEBUG_MEMORY_MANAGER is set to 0 in OgreConfig.h. Otherwise some parts of your app will use Ogres memory manager to allocate memory, while other parts use the standard c++ delete to deallocate or vice versa. Disabling Ogre's memory manager makes sure that everyone uses the system new/deletes. Alternatively, include Ogre header files in all of your .cpps.
Linux users may find some additional help on the OGRE and LINUX fix page.
Most compiler issues are caused by either incorrect settings in your IDE or incorrect code you've typed in. Searching google with your error message is often a very useful troubleshooting technique. If this doesn't turn up anything, search the forums. If you still don't have any results, read the forum rules and then ask a question.