Why can't I build Vim with Visual Studio 2015 RC Command Line Tools?

I installed Visual Studio 2015 Community Community Edition yesterday . As a first test, I tried to build GVim from source.

I opened a command window with "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2015\Visual Studio Tools\Windows Desktop Command Prompts\VS2015 x64 Native Tools Command Prompt.lnk"

, installed

set include=%include%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include

      

so it Make_mvc.mak

takes the file Win32.mak

. Also, I installed:

set MSVCVER=12.0

      

as make file doesn't detect new version of Visual Studio at this point.

After that I have:

Framework40Version = v4.0
FrameworkDir = C: \ Windows \ Microsoft.NET \ Framework64
FrameworkDIR64 = C: \ Windows \ Microsoft.NET \ Framework64
FrameworkVersion = v4.0.30319
FrameworkVersion64 = v4.0.30319
FSHARPINSTALLDIR = C: \ Program Files (x86) \ Microsoft SDKs \ F # \ 4.0 \ Framework \ v4.0 \
INCLUDE = C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ INCLUDE; C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ ATLMFC \ INCLUDE; C: \ Program Files (x86) \ Windows Kits \ 10 \\ include \ 10.0.10056.0 \ ucrt; C: \ Program Files (x86) \ Windows Kits \ 8.1 \ include \ shared; C: \ Program Files (x86) \ Windows Kits \ 8.1 \ include \ um; C : \ Program Files (x86) \ Windows Kits \ 8.1 \ include \ winrt ;; C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Include
LIB = C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ LIB \ amd64; C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ ATLMFC \ LIB \ amd64; C: \ Program Files ( x86) \ Windows Kits \ 10 \\ lib \ 10.0.10056.0 \ ucrt \ x64; C: \ Program Files (x86) \ Windows Kits \ 8.1 \ lib \ winv6.3 \ um \ x64;
LIBPATH = C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319; C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ LIB \ amd64; C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ ATLMFC \ LIB \ amd64; C: \ Program Files (x86) \ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral; \ Microsoft.VCLibs \ 14.0 \ References \ CommonConfiguration \ neutral;
MSVCVER = 12.0
Platform = X64
PROCESSOR_ARCHITECTURE = AMD64
UniversalCRTSdkDir = C: \ Program Files (x86) \ Windows Kits \ 10 \
VCINSTALLDIR = C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \
VisualStudioVersion = 14.0
VS100COMNTOOLS = C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools \
VS110COMNTOOLS = C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ Tools \
VS120COMNTOOLS = C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Tools \
VS140COMNTOOLS = C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \
VSINSTALLDIR = C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \
windir = C: \ Windows
WindowsSdkDir = C: \ Program Files (x86) \ Windows Kits \ 8.1 \
WindowsSDK_ExecutablePath_x64 = C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ x64 \
WindowsSDK_ExecutablePath_x86 = C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \

I can create a simple program:

C: \ ... \ Temp> type tc                          
#include                                                    

int main (void) {                                                     
    printf ("Hello% s \ n", "Stackoverflow.com");                       
    return 0;                                                        
}                                                                    

C: \ ... \ Temp> cl tc                            
Microsoft (R) C / C ++ Optimizing Compiler Version 19.00.22816 for x64  
Copyright (C) Microsoft Corporation. All rights reserved.           

tc                                                                  
Microsoft (R) Incremental Linker Version 14.00.22816.0               
Copyright (C) Microsoft Corporation. All rights reserved.           

/out:t.exe                                                           
t.obj                                                                

C: \ ... \ Temp> t.exe                             
Hello Stackoverflow.com

However, when I issue the command to build my GVim (which works great with Visual Studio 2013 CE tools), the compilation goes well, but I get the following link errors:

C: \ ... \ vim \ src> nmake -f Make_mvc.mak CPU = AMD64 OPTIMIZE = SPACE GETTEXT = no NETBEANS = no CSCOPE = no DIRECTX = yes GUI = yes

I am discarding most of the error messages because there are a lot of them:

gui_dwrite.obj: error LNK2001: unresolved external symbol memcmp
blowfish.obj: error LNK2001: unresolved external symbol memcmp
crypt.obj: error LNK2001: unresolved external symbol memcmp
sha256.obj: error LNK2001: unresolved external symbol memcmp
undo.obj: error LNK2001: unresolved external symbol memcmp
blowfish.obj: error LNK2019: unresolved external symbol memcpy referenced in function bf_e_cblock
winclip.obj: error LNK2001: unresolved external symbol memcpy
screen.obj: error LNK2001: unresolved external symbol memcpy
sha256.obj: error LNK2001: unresolved external symbol memcpy
gui.obj: error LNK2001: unresolved external symbol memmove
gui_w32.obj: error LNK2001: unresolved external symbol memmove
tag.obj: error LNK2001: unresolved external symbol memmove
term.obj: error LNK2001: unresolved external symbol memmove
ui.obj: error LNK2001: unresolved external symbol memmove
undo.obj: error LNK2001: unresolved external symbol memmove
screen.obj: error LNK2001: unresolved external symbol memmove
search.obj: error LNK2001: unresolved external symbol memmove
spell.obj: error LNK2001: unresolved external symbol memmove
syntax.obj: error LNK2001: unresolved external symbol memmove
os_mswin.obj: error LNK2001: unresolved external symbol memmove
os_win32.obj: error LNK2001: unresolved external symbol memmove
quickfix.obj: error LNK2001: unresolved external symbol memmove
regexp.obj: error LNK2001: unresolved external symbol memmove
misc2.obj: error LNK2001: unresolved external symbol memmove
normal.obj: error LNK2001: unresolved external symbol memmove
ops.obj: error LNK2001: unresolved external symbol memmove
option.obj: error LNK2001: unresolved external symbol memmove
memline.obj: error LNK2001: unresolved external symbol memmove
menu.obj: error LNK2001: unresolved external symbol memmove
message.obj: error LNK2001: unresolved external symbol memmove
misc1.obj: error LNK2001: unresolved external symbol memmove
getchar.obj: error LNK2001: unresolved external symbol memmove
hashtab.obj: error LNK2001: unresolved external symbol memmove
mark.obj: error LNK2001: unresolved external symbol memmove
...
misc2.obj: error LNK2001: unresolved external symbol fwrite
spell.obj: error LNK2001: unresolved external symbol fwrite
edit.obj: error LNK2019: unresolved external symbol isalnum referenced in function ins_ctrl_ey
regexp.obj: error LNK2001: unresolved external symbol isalnum
ui.obj: error LNK2001: unresolved external symbol strncpy
gui_w32.obj: error LNK2001: unresolved external symbol strncpy
libXpm.lib (parse.obj): error LNK2001: unresolved external symbol strncpy
libXpm.lib (data.obj): error LNK2001: unresolved external symbol strncpy
regexp.obj: error LNK2001: unresolved external symbol strncpy
screen.obj: error LNK2001: unresolved external symbol strncpy
...
main.obj: error LNK2001: unresolved external symbol close
memfile.obj: error LNK2001: unresolved external symbol close
libXpm.lib (parse.obj): error LNK2001: unresolved external symbol free
libXpm.lib (hashtab.obj): error LNK2001: unresolved external symbol free
libXpm.lib (data.obj): error LNK2001: unresolved external symbol free
libXpm.lib (misc.obj): error LNK2001: unresolved external symbol free
...
eval.obj: error LNK2001: unresolved external symbol free
misc2.obj: error LNK2001: unresolved external symbol free
os_win32.obj: error LNK2001: unresolved external symbol free
gui_w32.obj: error LNK2001: unresolved external symbol free
libcmt.lib (new_scalar.obj): error LNK2001: unresolved external symbol malloc
libXpm.lib (simx.obj): error LNK2001: unresolved external symbol malloc
eval.obj: error LNK2001: unresolved external symbol malloc
misc2.obj: error LNK2001: unresolved external symbol malloc
os_win32.obj: error LNK2001: unresolved external symbol malloc
gui_w32.obj: error LNK2001: unresolved external symbol malloc
normal.obj: error LNK2001: unresolved external symbol realloc
regexp.obj: error LNK2001: unresolved external symbol realloc
libXpm.lib (simx.obj): error LNK2001: unresolved external symbol realloc
eval.obj: error LNK2001: unresolved external symbol realloc
memline.obj: error LNK2001: unresolved external symbol realloc
misc1.obj: error LNK2001: unresolved external symbol realloc
misc2.obj: error LNK2001: unresolved external symbol realloc
...
ex_docmd.obj: error LNK2001: unresolved external symbol stricmp
ops.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
option.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
search.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
spell.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
fold.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
getchar.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
main.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
mark.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
eval.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
ex_cmds.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
ex_docmd.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
ex_getln.obj: error LNK2001: unresolved external symbol __stdio_common_vfprintf
window.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
gui.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
gui_w32.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
version.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
spell.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
syntax.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
tag.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
term.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
regexp.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
screen.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
search.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
sha256.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
ops.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
option.obj: error LNK2001: unresolved external symbol __stdio_common_vsprintf
...
_crt_atexit referenced in function _onexit
libcmt.lib (utility.obj): error LNK2019: unresolved external symbol _crt_at_quick_exit referenced in function at_quick_exit
libcmt.lib (utility.obj): error LNK2019: unresolved external symbol _cexit referenced in function __scrt_dllmain_uninitialize_c
libcmt.lib (exe_winmain.obj): error LNK2001: unresolved external symbol _cexit
libcmt.lib (new_scalar.obj): error LNK2019: unresolved external symbol _callnewh referenced in function "void * __cdecl operator new (unsigned __int64)" ( ?? 2 @ YAPEAX _K @ Z )
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol _seh_filter_exe referenced in function "int` int __cdecl __scrt_common_main_seh (void) ':: `1' :: filt $ 0" ( ? filt $ 0 @ ? 0 ?? __ scrt_seh @ filtm @ YAHXZ @ 4HA )
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol _set_app_type referenced in function "int __cdecl pre_c_initialization (void)" ( ? pre_c_initialization @ @YAHXZ)
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol __setusermatherr referenced in function "int __cdecl pre_c_initialization (void)" ( ? pre_c_initialization @ @YAHXZ)
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol _configure_narrow_argv referenced in function "int __cdecl pre_c_initialization (void)" ( ? pre_c_initialization @ @YAHXZ)
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol _get_narrow_winmain_command_line referenced in function "int __cdecl __scrt_common_main_seh (void)" ( ? __ scrt_common_main_seh) @ @YAHXZ
libcmt.lib (exe_winmain.obj): error LNK2019: unresolved external symbol _initterm referenced in function "int __cdecl __scrt_common_main_seh (void)" ( ? __ scrt_common_main_seh @ @YAHXZ)
...
libXpm.lib (rgb.obj): error LNK2019: unresolved external symbol strdup referenced in function xpmGetRGBfromName
oldnames.lib (strdup.obj): error LNK2001: unresolved external symbol strdup
oldnames.lib (strdup.obj): error LNK2001: unresolved external symbol _strdup
gvim.exe: fatal error LNK1120: 183 unresolved externals

I feel like I am missing something obvious. What has changed between VS 2013 and VS 2015?

+3


source to share


1 answer


It turns out this has already been reported on the vim_dev mailing list and it has to do with a refactoring of the C runtime.

In particular, the parameter /nodefaultlib

for the linker seems to be causing the problem.

The patch included in Pavel Moore's observation worked for me.



The pre-compiled XPM library included with Vim seems to be statically linked to MSVCRT. This issue is mentioned in CRT Library Functions :

If you have multiple DLLs or EXEs, you can have multiple CRTs, regardless of whether you are using different versions of Visual C ++. For example, statically linking a CRT to multiple DLLs can present the same problem. Developers facing this issue with static CRTs have been instructed to compile with a /MD

DLL CRT to use. Now that the CRT DLL has been renamed to msvcr110.dll

, applications can have some components associated with msvcrt.dll

and others with msvcr110.dll

. If your DLLs are passing CRT resources on the border msvcrt.dll

and msvcr110.dll

, you will run into inconsistent CRT issues and must recompile your project with Visual C ++.

I have not tried to recompile the included XPM library using VS2015, so XPM support in my GVim is now disabled.

+2


source







All Articles