Reputation:
I'm attempting to use boost::filesystem
in my project, but I've run into linker errors:
Error 14 error LNK1169: one or more multiply defined symbols found C:\Users\Developer\Desktop\mandala3d\Debug\mandala.exe 1 1 mandala
Error 5 error LNK2005: "public: __thiscall std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QAE@PBD@Z) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 4 error LNK2005: "public: __thiscall std::bad_cast::bad_cast(class std::bad_cast const &)" (??0bad_cast@std@@QAE@ABV01@@Z) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 12 error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) already defined in LIBCMT.lib(stdexcpt.obj) C:\Users\Developer\Desktop\mandala3d\mandala\MSVCRTD.lib(MSVCR110D.dll) mandala
Error 6 error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 7 error LNK2005: "public: __thiscall std::exception::exception(void)" (??0exception@std@@QAE@XZ) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 8 error LNK2005: "public: virtual __thiscall std::bad_cast::~bad_cast(void)" (??1bad_cast@std@@UAE@XZ) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 9 error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(stdexcpt.obj) mandala
Error 13 error LNK2005: "public: virtual char const * __thiscall std::exception::what(void)const " (?what@exception@std@@UBEPBDXZ) already defined in LIBCMT.lib(stdexcpt.obj) C:\Users\Developer\Desktop\mandala3d\mandala\MSVCRTD.lib(MSVCR110D.dll) mandala
Error 10 error LNK2005: __invalid_parameter already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(invarg.obj) mandala
Error 11 error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR110D.dll) C:\Users\Developer\Desktop\mandala3d\mandala\LIBCMT.lib(invarg.obj) mandala
I am building boost with the following commands:
bootstrap
.\b2
And I am pointing to $BOOSTDIR\stage\lib
for the library include directory and my compiler is Visual Studio 2012 (v110)
.
I have tried directly linking the debug
libraries that are generated in the $BOOSTDIR\lib\*
directories but ran into other errors. I also suspect that that is not the standard or intended way to statically link the libraries.
What am I doing wrong here?
Upvotes: 1
Views: 1795
Reputation: 13993
You're mixing both C runtime library linkages and debug/release binaries.
libcmt
is the release version of the static C runtime library, while msvcrtd
is the debug version of the dynamic C runtime library. You have both showing up in your errors, meaning that you're trying to mix them, which you can't do.
You need to rebuild Boost to use the same version of the C runtime as your project, or rebuild your project to use the same version as Boost. However, the fact that you currently have debug and release libraries mixed is usually a sign that something else is really wrong with your settings.
If you look in your project's properties and go to C/C++ -> Code Generation, you'll see a 'Runtime Library' field. You can change this to specify how your project should link to the C runtime. /MDd will link msvcrtd.dll
, while /MT will link libcmt.lib
.
Upvotes: 5