我正在Visual Studio 2010中创建一个静态库。该库将与我的另一个应用程序进行静态链接以生成.exe文件。问题是我希望我的.exe文件静态链接到C和C ++库(不想依赖于msvcp100.dll和msvcr100.dll)。但是,无论我做什么,都无法使其工作。
如果我将我的静态库与静态的C和C ++库链接起来,那么我就无法编译.exe文件 - 链接器会抱怨“已定义的符号”。
如果我将我的静态库与C和C ++ DLL链接,则我的.exe文件最终会依赖于msvcp100.dll和msvcr100.dll。
我该如何告诉VS只在链接到我的.exe文件时才将我的静态库与静态的C和C ++库链接起来?
编辑
以下是当静态库和.exe用户/ MT(即运行时库的静态链接)时的一些自由链接器错误:
如果我设置/NODEFAULTLIB:LIBCMT,则mscvrt.lib的错误消失,但msvcprt.lib的错误仍然存在。
如果我将我的静态库与静态的C和C ++库链接起来,那么我就无法编译.exe文件 - 链接器会抱怨“已定义的符号”。
如果我将我的静态库与C和C ++ DLL链接,则我的.exe文件最终会依赖于msvcp100.dll和msvcr100.dll。
我该如何告诉VS只在链接到我的.exe文件时才将我的静态库与静态的C和C ++库链接起来?
编辑
以下是当静态库和.exe用户/ MT(即运行时库的静态链接)时的一些自由链接器错误:
1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)" (?_Decref@facet@locale@std@@QAEPAV123@XZ) already defined in re2_release.lib(regexp.obj)
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "protected: virtual class std::basic_streambuf<char,struct std::char_traits<char> > * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::setbuf(char *,__int64)" (?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PAD_J@Z) already defined in re2_release.lib(regexp.obj)
1>msvcrt.lib(MSVCR100.dll) : error LNK2005: _strtoul already defined in LIBCMT.lib(strtol.obj)
1>LIBCMT.lib(crt0init.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
如果我设置/NODEFAULTLIB:LIBCMT,则mscvrt.lib的错误消失,但msvcprt.lib的错误仍然存在。