我有一个UWP的C库项目。有些C文件调用CPP文件中定义的C ++ WINRT函数。它正在成功编译并生成库文件(LIB)。我在Visual Studio 2015中使用更新1进行编译,目标平台是10.0.10240.0
但是,我想生成DLL而不是LIB文件。这是我更改项目所做的更改,以便生成DLL而不是LIB。
Try1: 因此,在启动项目中,In Configuration Properties =>一般我将配置从静态库更改为动态库。
在所有项目中,我从多线程调试(/ MTd)更改为多线程调试DLL(/ MDd)。
Try2: 创建了一个新项目Windows Universal Project,并将创建LIB的项目中的所有文件添加到此项目中。不过,我收到了以下错误。
现在,我收到了错误
vccorlibd.lib(init.obj) : error LNK2038: mismatch detected for 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker': value '1' doesn't match value '0' in msvcrtd.lib(app_appinit.obj)
vccorlibd.lib(init.obj) : error LNK2005: __crtWinrtInitType already defined in msvcrtd.lib(app_appinit.obj)
msvcrtd.lib(initializers.obj) : warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
任何建议如何解决此问题。
答案 0 :(得分:6)
我有相同的问题并使用链接器标志修复它:
/nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib
对于调试版本,您可以使用:
/nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib
答案 1 :(得分:3)
标准/ nodefaultlib对我不起作用。
以下链接器标志(用于调试)在我的情况下完成了这个技巧:
/defaultlib:'vccorlibd.lib' /defaultlib:'msvcrtd.lib'