Dushistov / sdcv

https://dushistov.github.io/sdcv/
GNU General Public License v2.0
294 stars 42 forks source link

Compilation failure on Windows #45

Closed et2010 closed 6 years ago

et2010 commented 6 years ago

Hi, I'd like to compile sdcv with mingw-64 on Windows but bumped into following errors:

$ cmake -G "MinGW Makefiles" -DCMAKE_SH="CMAKE_SH-NOTFOUND" ../sdcv-0.5.2
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe
-- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CXX_SUPPORTS_CXX11
-- Performing Test CXX_SUPPORTS_CXX11 - Success
-- Found ZLIB: C:/msys64/mingw64/lib/libz.dll.a (found version "1.2.11")
-- Found PkgConfig: C:/msys64/mingw64/bin/pkg-config.exe (found version "0.29.2")
-- Checking for one of the modules 'glib-2.0'
-- Found GLib2: glib-2.0;intl C:/msys64/mingw64/include/glib-2.0;C:/msys64/mingw64/lib/glib-2.0/include;C:/msys64/mingw64/include
-- Looking for include file glib/gregex.h
-- Looking for include file glib/gregex.h - not found
-- REQUIRED_VARS
-- Looking for mmap
-- Looking for mmap - not found
-- Looking for locale.h
-- Looking for locale.h - found
-- Configuring done
-- Generating done
-- Build files have been written to: D:/James/Work/build-sdcv
$ mingw32-make.exe
Scanning dependencies of target sdcv
[ 12%] Building CXX object CMakeFiles/sdcv.dir/src/sdcv.cpp.obj
[ 25%] Building CXX object CMakeFiles/sdcv.dir/src/readline.cpp.obj
[ 37%] Building CXX object CMakeFiles/sdcv.dir/src/libwrapper.cpp.obj
[ 50%] Building CXX object CMakeFiles/sdcv.dir/src/utils.cpp.obj
In file included from C:/msys64/mingw64/include/glib-2.0/glib/gi18n.h:23:0,
                 from D:\James\Work\sdcv-0.5.2\src\utils.cpp:29:
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6403:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6403:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(unsigned int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6408:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6408:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(long int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6414:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6414:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(long unsigned int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6419:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6419:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(long long int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6425:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6425:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(long long unsigned int)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6431:50: error: 'libintl_vsnprintf' is not a member of 'std'
   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6431:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(float)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6440:50: error: 'libintl_vsnprintf' is not a member of 'std'
     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6440:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(double)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6449:50: error: 'libintl_vsnprintf' is not a member of 'std'
     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6449:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h: In function 'std::__cxx11::string std::__cxx11::to_string(long double)':
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6458:50: error: 'libintl_vsnprintf' is not a member of 'std'
     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
                                                  ^
C:/msys64/mingw64/include/c++/7.3.0/bits/basic_string.h:6458:50: note: suggested alternative:
C:/msys64/mingw64/include/libintl.h:379:12: note:   'libintl_vsnprintf'
 extern int vsnprintf (char *, size_t, const char *, va_list);
            ^
mingw32-make[2]: *** [CMakeFiles\sdcv.dir\build.make:105: CMakeFiles/sdcv.dir/src/utils.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:67: CMakeFiles/sdcv.dir/all] Error 2
mingw32-make: *** [Makefile:151: all] Error 2

Any ideas?

Dushistov commented 6 years ago

Any ideas?

In fact build on windows is not supported, because of I don't use windows. But looks like in your libintl.h header there is define like #define snprintf libintl_snprintf, by moving orders of includes in src/uilts.cpp you can try fix this issue. Or you can find place with #define snprintf libintl_snprintf and removes it, if you use prebuild libintl and glib.

et2010 commented 6 years ago

Thanks for the quick reply. I don't know much about c++, so I take the second approach you suggested and build successfully by removing those lines in libintl.h

#if !(defined vsnprintf && defined _GL_STDIO_H) /* don't override gnulib */
#undef vsnprintf
#define vsnprintf libintl_vsnprintf
extern int vsnprintf (char *, size_t, const char *, va_list);
#endif

However, when I run sdcv.exe, it just throws segfault:

$ ./sdcv.exe
Segmentation fault

Edit:

I tried to put all the dlls in the same directory where sdcv.exe locates and now I can list the dictionary:

image

But it still crashes when searching, the error log says the fault module is msvcrt.dll:

Version=1
EventType=APPCRASH
EventTime=131740256528855129
ReportType=2
Consent=1
UploadTime=131740256529792655
ReportIdentifier=f69a2450-7503-11e8-bf02-00c2c6695720
IntegratorReportIdentifier=f69a244f-7503-11e8-bf02-00c2c6695720
NsAppName=sdcv.exe
Response.type=4
Sig[0].Name=应用程序名
Sig[0].Value=sdcv.exe
Sig[1].Name=应用程序版本
Sig[1].Value=0.0.0.0
Sig[2].Name=应用程序时间戳
Sig[2].Value=5b2b0f65
Sig[3].Name=故障模块名称
Sig[3].Value=msvcrt.dll
Sig[4].Name=故障模块版本
Sig[4].Value=7.0.9600.17415
Sig[5].Name=故障模块时间戳
Sig[5].Value=545055fe
Sig[6].Name=异常代码
Sig[6].Value=c0000005
Sig[7].Name=异常偏移
Sig[7].Value=00000000000011d0
DynamicSig[1].Name=OS 版本
DynamicSig[1].Value=6.3.9600.2.0.0.768.99
DynamicSig[2].Name=区域设置 ID
DynamicSig[2].Value=2052
DynamicSig[22].Name=其他信息 1
DynamicSig[22].Value=d729
DynamicSig[23].Name=其他信息 2
DynamicSig[23].Value=d7292b5fa83503405ae38fa5784bc25a
DynamicSig[24].Name=其他信息 3
DynamicSig[24].Value=cb4b
DynamicSig[25].Name=其他信息 4
DynamicSig[25].Value=cb4b3679ff3bd42c1d00259c555b2390
UI[2]=C:\Program Files (x86)\sdcv\bin\sdcv.exe
UI[3]=sdcv.exe 已停止工作
UI[4]=Windows 可以联机检查该问题的解决方案。
UI[5]=联机检查解决方案并关闭该程序
UI[6]=以后联机检查解决方案并关闭程序
UI[7]=关闭程序
LoadedModule[0]=C:\Program Files (x86)\sdcv\bin\sdcv.exe
LoadedModule[1]=C:\WINDOWS\SYSTEM32\ntdll.dll
LoadedModule[2]=C:\WINDOWS\system32\KERNEL32.DLL
LoadedModule[3]=C:\WINDOWS\system32\KERNELBASE.dll
LoadedModule[4]=C:\Program Files (x86)\sdcv\bin\libglib-2.0-0.dll
LoadedModule[5]=C:\Program Files (x86)\sdcv\bin\libintl-8.dll
LoadedModule[6]=C:\Program Files (x86)\sdcv\bin\libreadline7.dll
LoadedModule[7]=C:\Program Files (x86)\sdcv\bin\zlib1.dll
LoadedModule[8]=C:\WINDOWS\system32\msvcrt.dll
LoadedModule[9]=C:\WINDOWS\system32\USER32.dll
LoadedModule[10]=C:\Program Files (x86)\sdcv\bin\libgcc_s_seh-1.dll
LoadedModule[11]=C:\Program Files (x86)\sdcv\bin\libstdc++-6.dll
LoadedModule[12]=C:\WINDOWS\system32\ADVAPI32.dll
LoadedModule[13]=C:\WINDOWS\system32\ole32.dll
LoadedModule[14]=C:\Program Files (x86)\sdcv\bin\libwinpthread-1.dll
LoadedModule[15]=C:\WINDOWS\system32\SHELL32.dll
LoadedModule[16]=C:\WINDOWS\system32\WS2_32.dll
LoadedModule[17]=C:\msys64\mingw64\bin\libpcre-1.dll
LoadedModule[18]=C:\Program Files (x86)\sdcv\bin\libiconv-2.dll
LoadedModule[19]=C:\msys64\mingw64\bin\libtermcap-0.dll
LoadedModule[20]=C:\WINDOWS\system32\GDI32.dll
LoadedModule[21]=C:\WINDOWS\SYSTEM32\sechost.dll
LoadedModule[22]=C:\WINDOWS\system32\RPCRT4.dll
LoadedModule[23]=C:\WINDOWS\SYSTEM32\combase.dll
LoadedModule[24]=C:\WINDOWS\system32\SHLWAPI.dll
LoadedModule[25]=C:\WINDOWS\system32\NSI.dll
LoadedModule[26]=C:\WINDOWS\system32\SspiCli.dll
LoadedModule[27]=C:\WINDOWS\system32\IMM32.DLL
LoadedModule[28]=C:\WINDOWS\system32\MSCTF.dll
LoadedModule[29]=C:\WINDOWS\SYSTEM32\SHCORE.dll
LoadedModule[30]=C:\WINDOWS\SYSTEM32\kernel.appcore.dll
LoadedModule[31]=C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
LoadedModule[32]=C:\WINDOWS\SYSTEM32\bcryptPrimitives.dll
LoadedModule[33]=C:\WINDOWS\system32\uxtheme.dll
LoadedModule[34]=C:\Program Files\Listary\ListaryHook64.dll
LoadedModule[35]=C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.17810_none_34ae2abd958aedeb\COMCTL32.dll
LoadedModule[36]=C:\WINDOWS\SYSTEM32\OLEACC.dll
LoadedModule[37]=C:\Program Files (x86)\Stardock\Start8\Start8_64.dll
LoadedModule[38]=C:\WINDOWS\system32\OLEAUT32.dll
LoadedModule[39]=C:\WINDOWS\system32\SETUPAPI.dll
LoadedModule[40]=C:\WINDOWS\system32\CFGMGR32.dll
LoadedModule[41]=C:\WINDOWS\SYSTEM32\clbcatq.dll
LoadedModule[42]=C:\WINDOWS\system32\propsys.dll
LoadedModule[43]=C:\WINDOWS\SYSTEM32\profapi.dll
FriendlyEventName=已停止工作
ConsentKey=APPCRASH
AppName=sdcv.exe
AppPath=C:\Program Files (x86)\sdcv\bin\sdcv.exe
NsPartner=windows
NsGroup=windows8
ApplicationIdentity=621A1A7734B90D085E9E28F4E9396BE3

I googled and found it may be due to the c++ runtime library on windows:

https://stackoverflow.com/questions/28783079/mingw-and-msvcrt-dll-confusion

https://stackoverflow.com/questions/27451875/going-on-with-no-msvcrt-dll

et2010 commented 6 years ago

I built a msys2 binary (not mingw) and it works, thanks for the help!