I am trying to debug kernel in remote debugging using vmware and windbg.I have connected to target machine .My driver name is comint32.I have started the service of my driver in target machine .I want to view the dbgprint of my driver.Whenever I try to use break point I got an error "couldn't resolve error at 'comint32!DriverEntry'".This is the current status windbg output:
kd> x*!
start end module name
80bd1000 80bd9000 kdcom (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\kdcom.pdb\F48BD9BC030C43D89689518F892586901\kdcom.pdb
82812000 82849000 hal (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\halmacpi.pdb\AE605D6C59454802AE1D485E0B089A571\halmacpi.pdb
82849000 82c5b000 nt (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ntkrpamp.pdb\684DA42A30CC450F81C535B4D18944B12\ntkrpamp.pdb
82e09000 82e8e000 mcupdate_GenuineIntel (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\mcupdate_GenuineIntel.pdb\26689A9400E04CF6AD63DC2E608DAA9C1\mcupdate_GenuineIntel.pdb
82e8e000 82e9f000 PSHED (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\pshed.pdb\5ACEAFD8AD3A46FEAD083AFDF675DA391\pshed.pdb
82e9f000 82ea7000 BOOTVID (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\bootvid.pdb\10C3ABD4165D4ED3A9493BB094B44AEA1\bootvid.pdb
82ea7000 82ee9000 CLFS (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\clfs.pdb\04F22EAC7BD04A1BA81A6FB5D319649F1\clfs.pdb
82ee9000 82f94000 CI (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ci.pdb\3358E6E48A5245F6AB97EA05356E020F1\ci.pdb
82f94000 82fdf000 volmgrx (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\volmgrx.pdb\433F00DD3CC34DE8BC3F9E4BDDACA5EE1\volmgrx.pdb
82fdf000 82fed000 PCIIDEX (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\pciidex.pdb\8B7BC6201128486CB5B03916EBD5FF8E1\pciidex.pdb
83800000 83807000 intelide (no symbols)
8380a000 8387cd00 dsfksvcs (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\dsfksvcs.pdb\EE67C173CB4C4B31BA3806038D42B3C01\dsfksvcs.pdb
8387d000 838b8500 DSFOleaut32 (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\DSFOleaut32.pdb\F02C6A23966243E1B10F05EB634A88331\DSFOleaut32.pdb
838b9000 8392a000 Wdf01000 (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\Wdf01000.pdb\A9E46808F4F748178D3071AA9EE76FB71\Wdf01000.pdb
8392a000 83938000 WDFLDR (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\wdfldr.pdb\95D9DB57778548E6B6774520468479891\wdfldr.pdb
83938000 83980000 ACPI (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\acpi.pdb\E7300A0CC3524834A4E1E55773C1901E1\acpi.pdb
83980000 83989000 WMILIB (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\wmilib.pdb\F52B38A4800849D48BFFD48715A446A51\wmilib.pdb
83989000 83991000 msisadrv (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\msisadrv.pdb\5D6926DA4AD1474BAE8CBDA5909F68201\msisadrv.pdb
83991000 839bb000 pci (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\pci.pdb\2E2A912260694615A7E97AFBA3FA934E1\pci.pdb
839bb000 839c6000 vdrvroot (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\vdrvroot.pdb\3C9D6939EF564015B8D0728611C88C221\vdrvroot.pdb
839c6000 839d7000 partmgr (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\partmgr.pdb\7CA861FF7879483ABA38CE28186F293E2\partmgr.pdb
839d7000 839df000 compbatt (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\compbatt.pdb\EE14F03B54BF49B4B62A0EF912A59C8F1\compbatt.pdb
839df000 839ea000 BATTC (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\battc.pdb\53C47BEA2F08470BB58DFD1566285EC71\battc.pdb
839ea000 839fa000 volmgr (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\volmgr.pdb\4AF04B598C494297B1C69F95823AA9F81\volmgr.pdb
83a24000 83a3a000 mountmgr (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\mountmgr.pdb\356DDF9839E040638E034EEA956C28F81\mountmgr.pdb
83a3a000 83a43000 atapi (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\atapi.pdb\EF544461A5D5482980C2CA01640A6D621\atapi.pdb
83a43000 83a66000 ataport (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ataport.pdb\C9AF9FE9166548FD86EFAC017F6023011\ataport.pdb
83a66000 83a7e000 lsi_sas (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\lsi_sas.pdb\FCC2DAF36299423A9765B62D750A97461\lsi_sas.pdb
83a7e000 83ac6000 storport (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\storport.pdb\E19FF676062D46A69EB1BB6A916896172\storport.pdb
83ac6000 83acf000 amdxata (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\amdxata.pdb\5E66F230920844408A1EE389D50B6B4A1\amdxata.pdb
83acf000 83b03000 fltmgr (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\fltMgr.pdb\E6CA9E082E70438988788CB58DB340B01\fltMgr.pdb
83b03000 83b14000 fileinfo (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\fileinfo.pdb\EBD1E885413A4242AA515F1B06BB564F1\fileinfo.pdb
83b14000 83bcb000 ndis (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ndis.pdb\4DAAA54E2C26455DB2471D696BC8E6A62\ndis.pdb
83bcb000 83bfc000 fwpkclnt (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\fwpkclnt.pdb\FDE8223F22C54AEA8061EE56EA16A0251\fwpkclnt.pdb
88c00000 88c0e000 pcw (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\pcw.pdb\D368300F340A423EBBA32FBDDDEC24B91\pcw.pdb
88c0e000 88c17000 Fs_Rec (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\fs_rec.pdb\3465ED05A901452FAD07E77351F094591\fs_rec.pdb
88c2b000 88d5a000 Ntfs (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ntfs.pdb\04B176C327B240F7A576F3417A7B95032\ntfs.pdb
88d5a000 88d85000 msrpc (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\msrpc.pdb\B4C428CFD1024C43BD3E2B10D1A8F0711\msrpc.pdb
88d85000 88d98000 ksecdd (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ksecdd.pdb\E84CBB7448354030A32188581CC8B37A1\ksecdd.pdb
88d98000 88df5000 cng (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\cng.pdb\3F94705B83A0481DA755FA6A70729BDE1\cng.pdb
88df5000 88dfb000 comint32 (no symbols)
88e25000 88e63000 NETIO (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\netio.pdb\7A33726ABE884384BFDFB951F05D13AC2\netio.pdb
88e63000 88e88000 ksecpkg (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\ksecpkg.pdb\3D42090DFF4E4D55985F577277A3B1E91\ksecpkg.pdb
88e88000 88fd2000 tcpip (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\tcpip.pdb\0FD6F17209C1481C9008CCDB468746392\tcpip.pdb
88fd2000 88fd7580 dsfroot (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\dsfroot.pdb\95EE5096213948909946E4333289A97F1\dsfroot.pdb
88fd8000 88fe0380 vmstorfl (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\vmstorfl.pdb\D7FD176CC0134139B2EE4BEAF352AEE41\vmstorfl.pdb
89032000 89071000 volsnap (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\volsnap.pdb\1F66E7165E8F4BD982A34A9DFA1BBFD31\volsnap.pdb
89071000 89079000 spldr (no symbols)
89079000 890a6000 rdyboost (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\rdyboost.pdb\53BB42ABE1404332962CA2AEA8301D331\rdyboost.pdb
890a6000 890b6000 mup (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\mup.pdb\E96F69551E2447289250F71FB5AB6E0C2\mup.pdb
890b6000 890be000 hwpolicy (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\hwpolicy.pdb\0F041CEBADCA48F4BC65F68463272F1D1\hwpolicy.pdb
890be000 890f0000 fvevol (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\fvevol.pdb\DC4549C710EE425F8956C7D82BFE83651\fvevol.pdb
890f0000 89101000 disk (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\disk.pdb\D2AD04F7F4BF45C8A8F0E2BF689326F11\disk.pdb
89101000 89126000 CLASSPNP (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\classpnp.pdb\64A86A6AD27D4730A78ECC25166E13562\classpnp.pdb
89126000 89136000 agp440 (pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\agp440.pdb\BDB51BE7BF024CCF893C1E44B0C266C71\agp440.pdb
kd> .reload /f comint32
"comint32" was not found in the image list.
Debugger will attempt to load "comint32" at given base 00000000.
Please provide the full image name, including the extension (i.e. kernel32.dll)
for more reliable results.Base address and size overrides can be given as
.reload <image.ext>=<base>,<size>.
DBGENG: comint32 - Partial symbol image load missing image info
DBGHELP: No header for comint32. Searching for dbg file
DBGHELP: c:\chapter03ghost\src\objchk_win7_x86\i386\comint32.dbg - file not found
DBGHELP: .\comint32.dbg - file not found
DBGHELP: comint32 missing debug info. Searching for pdb anyway
DBGHELP: Can't use symbol server for comint32.pdb - no header information available
DBGHELP: C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\comint32.pdb\5E9D372C84174583B2DD476990BF10BA1\comint32.pdb already cached
DBGHELP: comint32_0 - private symbols & lines
C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\comint32.pdb\5E9D372C84174583B2DD476990BF10BA1\comint32.pdb - unmatched
Unable to add module at 00000000
the symbol path of windbg:
kd> .sympath
Symbol search path is: srv*;C:\Chapter03Ghost\bin
Expanded Symbol search path is: cache*;SRV*http://msdl.microsoft.com/download/symbols;c:\chapter03ghost\bin
Check to make sure that the driver is loaded. You can do this using lm or lmvm comint32 the first command will list all modules, the second one will give you detailed information on the comint32. If it isn't listed in the loaded modules, then most likely the driver hasn't been loaded yet. If it is loaded then that's a little odd for it to give this error, but I'm guessing it's not loaded.
Related
When I tried to validate, if WinDbg has been setup properly, I opened the executable C:\WINDOWS\NOTEPAD.exe and tried to check the loaded modules.
First of all, these are the environment variables set:
_NT_SYMBOL_PATH: c:\mysymbols;SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
_NT_EXECUTABLE_IMAGE_PATH: SRV*c:\symbols
This is the WinDbg output:
CommandLine: C:\WINDOWS\NOTEPAD.EXE
Symbol search path is: SRV*C:\symbols*https://msdl.microsoft.com/download/symbols;c:\mysymbols
Executable search path is: SRV*c:\symbols
ModLoad: 01000000 01014000 notepad.exe
ModLoad: 7c910000 7c9c9000 ntdll.dll
ModLoad: 7c800000 7c908000 C:\WINDOWS\system32\kernel32.dll
ModLoad: 76350000 7639a000 C:\WINDOWS\system32\comdlg32.dll
ModLoad: 77da0000 77e4a000 C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e50000 77ee3000 C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fc0000 77fd1000 C:\WINDOWS\system32\Secur32.dll
ModLoad: 773a0000 774a3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\COMCTL32.dll
ModLoad: 77be0000 77c38000 C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77ef0000 77f39000 C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e360000 7e3f1000 C:\WINDOWS\system32\USER32.dll
ModLoad: 77f40000 77fb6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 7e670000 7ee91000 C:\WINDOWS\system32\SHELL32.dll
ModLoad: 72f70000 72f96000 C:\WINDOWS\system32\WINSPOOL.DRV
(ef8.f6c): Break instruction exception - code 80000003 (first chance)
eax=001a1eb4 ebx=7ffd5000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c91120e esp=0007fb20 ebp=0007fc94 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
ntdll!DbgBreakPoint:
7c91120e cc int 3
I switched on sym noisy mode, called .reload and got the continued output when I tried to list the loaded modules:
0:000> !sym noisy
noisy mode - symbol prompts on
0:000> .reload
Reloading current modules
..............
DBGHELP: c:\mysymbols\ntdll.pdb - mismatched pdb
DBGHELP: c:\mysymbols\symbols\dll\ntdll.pdb - file not found
DBGHELP: c:\mysymbols\dll\ntdll.pdb - file not found
SYMSRV: Die Serververbindung wurde zurückgesetzt.
SYMSRV: c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb not found
SYMSRV: https://msdl.microsoft.com/download/symbols/ntdll.pdb/A618C674A4FC40F5B1781029C2C7F68E2/ntdll.pdb not found
DBGHELP: C:\WINDOWS\system32\ntdll.pdb - file not found
DBGHELP: ntdll.pdb - file not found
DBGHELP: Couldn't load mismatched pdb for C:\WINDOWS\system32\ntdll.dll
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
DBGHELP: ntdll - export symbols
0:000> lm
start end module name
01000000 01014000 notepad (deferred)
72f70000 72f96000 WINSPOOL (deferred)
76350000 7639a000 comdlg32 (deferred)
773a0000 774a3000 COMCTL32 (deferred)
77be0000 77c38000 msvcrt (deferred)
77da0000 77e4a000 ADVAPI32 (deferred)
77e50000 77ee3000 RPCRT4 (deferred)
77ef0000 77f39000 GDI32 (deferred)
77f40000 77fb6000 SHLWAPI (deferred)
77fc0000 77fd1000 Secur32 (deferred)
7c800000 7c908000 kernel32 (deferred)
7c910000 7c9c9000 ntdll (export symbols) C:\WINDOWS\system32\ntdll.dll
7e360000 7e3f1000 USER32 (deferred)
7e670000 7ee91000 SHELL32 (deferred)
The line 7c910000 7c9c9000 ntdll (export symbols) C:\WINDOWS\system32\ntdll.dll shows, that the symbol files couldn't get loaded successfully.
I have downloaded and installed the symbols (like WindowsXP-KB835935-SP2-slp-Symbols) but still the PDB files don't seem to match with my ntdll.dll build. But why is that the case? Is there any chance I can get this to work?
As I couldn't stop pondering about the root of the problem, I reread the output above:
SYMSRV: c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb not found
SYMSRV: https://msdl.microsoft.com/download/symbols/ntdll.pdb/A618C674A4FC40F5B1781029C2C7F68E2/ntdll.pdb not found
The debugger is looking for a symbol file having the GUID A618C674A4FC40F5B1781029C2C7F68E2, it even outputs an URI it is trying to load the pdb from. Thus, I tried to download the pdb manually, which worked, created the GUID directory manually, renamed the blob file to ntdll.pdb and placed it within the GUID-directory.
As a result, it did finally work, as the following output shows:
:000> .reload
Reloading current modules
............
DBGHELP: c:\mysymbols\ntdll.pdb - mismatched pdb
DBGHELP: c:\mysymbols\symbols\dll\ntdll.pdb - file not found
DBGHELP: c:\mysymbols\dll\ntdll.pdb - file not found
DBGHELP: ntdll - public symbols
c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb
..
0:000> lm
start end module name
01000000 01014000 notepad (deferred)
72f70000 72f96000 WINSPOOL (deferred)
76350000 7639a000 comdlg32 (deferred)
773a0000 774a3000 COMCTL32 (deferred)
77be0000 77c38000 msvcrt (deferred)
77da0000 77e4a000 ADVAPI32 (deferred)
77e50000 77ee2000 RPCRT4 (deferred)
77ef0000 77f38000 GDI32 (deferred)
77f40000 77fb6000 SHLWAPI (deferred)
77fc0000 77fd1000 Secur32 (deferred)
7c800000 7c907000 kernel32 (deferred)
7c910000 7c9c9000 ntdll (pdb symbols) c:\symbols\ntdll.pdb\A618C674A4FC40F5B1781029C2C7F68E2\ntdll.pdb
7e360000 7e3f0000 USER32 (deferred)
7e670000 7ee90000 SHELL32 (deferred)
EDIT: I was finally able to get the automatic download from the symbol server working! I always thought about it in the beginning, but did not believe it could be the reason: With a newer version 6.12.0002.633 it does work as expected, while with the 6.6.07.5 it did not.
My attempts to compile the simplest of C program to ARM, directly with cl.exe on a Win10 x86-64 environment always results in the following error:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX64\arm\cl.exe" /c 1.c
1.c
c1: fatal error C1356: unable to find mspdbcore.dll
Note that everything works fine if I target x86 code: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\cl.exe" /c 1.c
I can compile and link this program just fine if doing it from within VS. Am I missing something on the PATH? It also seems that I only have two versions of mspdbcore.dll, one in Hostx64/x64 and another one in Hostx86/x86; nothing in the arm/arm64 equivalent folders.
File: 1.c:
int main(void) {
return 0;
}
Okay, it turned out the problem was connected to missing or incorrect environment variables after all...
I set up custom overrides for PATH, INCLUDE, LIB, and LIBPATH matching the values provided by the "VC++ Directories" options of a sample ARM VS project, and things are now compiling smoothly.
Edit #1: Settings I used, for VS2017: (They can be found in the "VC++ Directories" options widget I mentioned above)
set PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX86\arm;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\tools;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ide;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\include;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\winrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um
set LIB=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\lib\ARM;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\lib\ARM;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\lib\ARM;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\ucrt\arm;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\um\arm;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\arm;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Lib\um\arm
set LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\lib\ARM;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\lib\ARM;C:\Program Files (x86)\Windows Kits\10\References
Some VS directories have mspdbcore.dll, and some don't. Declaring the path in LIBPATH doesn't fix it.
For example, .\bin\Hostx64\x64\ and .\bin\Hostx86\x86\ have mspdbcore.dll, but .\bin\Hostx64\x86\ does not, so if you want to run the 32-bit compiler on a 64-bit system, use .\bin\Hostx86\x86\cl.exe, not .\bin\Hostx64\x86\cl.exe.
How do I avoid the unresolved external symbol _mainCRTStartup error when using the MSVC toolchain (ex: CL.EXE) from within an MSYS environment?
Details:
I started a "VS2013 x64 Native Tools Command Prompt" and the launched C:\msys64\msys2.exe from there.
In my MSYS session I get results like this:
user#host MSYS /c/libpostal/libpostal
$ "/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/vcvars64.bat"
user#host MSYS /c/libpostal/libpostal
$ cl "-nologo" "conftest.c" "-link" "-SUBSYSTEM:CONSOLE"
conftest.c
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
conftest.exe : fatal error LNK1120: 1 unresolved externals
user#host MSYS /c/libpostal/libpostal
$ cat conftest.c
/* confdefs.h */
#define PACKAGE_NAME "libpostal"
#define PACKAGE_TARNAME "libpostal"
#define PACKAGE_VERSION "1.0.0"
#define PACKAGE_STRING "libpostal 1.0.0"
#define PACKAGE_BUGREPORT ""
#define PACKAGE_URL ""
#define PACKAGE "libpostal"
#define VERSION "1.0.0"
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
user#host MSYS /c/libpostal/libpostal
$ echo $PATH
/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
If I try to put the same "cl" command into the "VS2013 x64 Native Tools Command Prompt", I get the expected result instead:
C:\libpostal\libpostal>cl "-nologo" "conftest.c" "-link" "-SUBSYSTEM:CONSOLE"
conftest.c
C:\libpostal\libpostal>cl "/nologo" "conftest.c" "/link" "/SUBSYSTEM:CONSOLE"
conftest.c
C:\libpostal\libpostal>conftest.exe
C:\libpostal\libpostal>echo %PATH%
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\MSBuild\12.0\bin\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\8.1\bin\x64;C:\Program Files (x86)\Windows Kits\8.1\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\MSBuild\12.0\bin\amd64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\8.1\bin\x64;C:\Program Files (x86)\WindowsKits\8.1\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin\;C:\Program Files\Microsoft Dynamics AX\60\BusinessConnector\Bin\;C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files(x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Git\cmd;C:\D\dmd2\windows\bin;C:\msys64;C:\msys64\usr\local\bin;C:\msys64\usr\bin;C:\msys64\bin;C:\msys64\opt\bin
This happened while I was trying to use cccl to build a posix project (libpostal) using the MSVC toolchain so I can link it with other MSVC code. As such, any answers involving Visual Studio GUI will probably not be very helpful: I need to figure out how to make it work from within the MSYS2/MSYS64 environment.
In the MSYS example I intentionally moved /c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin to the beginning of my $PATH to avoid selecting the wrong executables. I originally received the same results (exact same error message) when it was at the end of the $PATH instead.
After checking everything in agonizing detail, I found the problem:
When C:\msys64\msys2.exe is executed from the "VS2013 x64 Native Tools Command Prompt", the $PATH variable will end up containing /c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin, but that is the wrong directory for 64-bit work. Instead the path should contain /c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64. Once I did that substitution, cl.exe worked fine.
Running vcvars64.bat from within the MSYS environment will not fix the $PATH. The above substitution has to be done manually or from a custom startup script like ~/.bashrc.
I have Visual Studio 2015 Community installed on Win10 64-bit. Using the VS2015 x64 Native Tools Command Prompt shell, I cannot find the MASM executable, ml. I thought it was installed with VS. I found the issue when running an nmake script as part of the OpenSSL build process for Windows.
ml /nologo /Cp /coff /c /Cx /Zi /Fotmp32dll\x86cpuid.obj tmp32dll\x86cpuid.asm
'ml' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.
Here is my %PATH%:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\MSBuild\14.0\bin\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Windows Kits\10\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\;C:\Perl64\site\bin;C:\Perl64\bin;C:\Program Files\Docker\Docker\Resources\bin;C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\PostgreSQL\pg95\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Users\Mike\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft Emulator Manager\1.0\;C:\Program Files (x86)\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\CMake\bin;C:\Users\Mike\Anaconda2;C:\Users\Mike\Anaconda2\Scripts;C:\Users\Mike\Anaconda2\Library\bin;C:\Users\Mike\AppData\Roaming\npm;C:\Users\Mike\bin
Is MASM included with VS 2015 Community, or is it a separate installable? This is the first time I've ever had to use MASM, so I'm learning a ton about the Windows build tools.
I'm trying to link to the fftw library using visual c++ express, but am getting linker errors when I try to compile. I generated the lib files as the site (http://fftw.org/install/windows.html) explains by creating .lib "import libraries" using the lib.exe program.
I added the .lib files to "Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib", and fftw3.h to "Program Files (x86)\Microsoft Visual Studio 9.0\VC\include". I then put the dll files in "Windows/system32" folder. I linked the libraries by adding them (libfftw3f-3.lib, libfftw3-3.lib, libfftw3l-3.lib) to additional dependencies on the linker/input preferences. When I try to compile I get the following errors:
process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_destroy_plan referenced in function _main
process_wav.obj : error LNK2019: unresolved external symbol __imp__fftwf_plan_dft_r2c_1d referenced in function _main
I searched on stack overflow but most of the answers explain that the libraries need to be added to additional dependencies to be found. When I put /verbose:lib on command line options I get the following:
f
fdf
1>Linking...
1>Searching libraries
1> Searching libfftw3f-3.lib:
1> Searching libfftw3-3.lib:
1> Searching libfftw3l-3.lib:
1> Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1> Searching libfftw3f-3.lib:
1> Searching libfftw3-3.lib:
1> Searching libfftw3l-3.lib:
1> Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\kernel32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\user32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\gdi32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\winspool.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\comdlg32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\advapi32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\shell32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\ole32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\oleaut32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\uuid.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\MSVCRTD.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\OLDNAMES.lib:
1> Searching F:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib\msvcprtd.lib:
1> Searching libfftw3f-3.lib:
1> Searching libfftw3-3.lib:
1> Searching libfftw3l-3.lib:
1> Searching F:\Program Files\Mega-Nerd\libsndfile-win32-bin-1.1.7\libsndfile-1.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbc32.lib:
1> Searching F:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib\odbccp32.lib:
1>Finished searching libraries
It seems to find the libraries but does not know who to find the function names in them. I got the code from a website which also uses this library, interestingly the function names do not appear in "fftw3.h" but I don't think this is the cause of the problem.
Any help would be greatly appreciated as I'm not sure where to turn now.
Thanks.
The following steps work for me in Visual Studio 2008 ( from http://itkcorner.blogspot.com/2012/01/inclusion-de-fftw-en-visual-studio-2008.html );
Download the file “fftw-3.3dll32.zip from fftw org website (http://www.fftw.org/install/windows.html)
In order to link to these .dll files from Visual C++, you need to create .lib "import libraries" for them, and can do so with the "lib" command that comes with VC++. In particular, run:
lib /def:libfftw3-3.def
In “Tools > Visual Studio 2008 Command Prompt” without opening any project, just Visual. Once you are in the console, you go with the ‘cd’ command to the root where the folder is placed and once there you run the three lines above, and then the ‘lib files are created.
Copy the folder where the libs are created and then copy it inside the project folder where we want to use it and rename the folder to “FFTW_LIBS”. In this folder the necessary files are the ones that have the ‘.dll’ , ‘.lib’ and the ‘fftw3.h’.
Inclusion of the libs in the project: “Project > Properties > Configuration Properties > Linker > Entry > Additional dependencies” and then we include the three new libs files:
libfftw3-3.lib
Inclusion of the path where the libs are:
a. “Project > Properties > Configuration Properties > Linker > General > Additional libs directory” , and there we write “./FFTW_LIBS”.
b. “Project > Properties > Configuration Properties > Depuration > Environment” , and there we write “./FFTW_LIBS”.
Inclusion of the path where the ‘.dll’ file is. In “Project > Properties > Configuration Properties > Depuration > Environment”. In the variable ‘enviroment’ we have to specify where the file ‘libfftw3-3.dll’ and we write “PATH = .\FFTW_LIBS”
After all of this steps, you just have to add “ #include fftw3.h” and use the fftw functions!
I will introduce a slight modification to Antonio's steps:
Following worked for me on Windwos 10, Visual Studio 2017, 32bit application, x64 computer:
Download precompiled FFTW 3.3.5 Windows DLLs and extract the .zip file
http://www.fftw.org/install/windows.html
Open a developer cmd prompt for VS 2017 RC and go to the extracted
folder
Run the lib application as follows to create the import libraries
(.lib files) from the .dll libraries:
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
Copy the following files into a new folder, call that new folder fftw_lib:
fftw3.h
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib
libfftw3-3.dll
libfftw3f-3.dll
libfftw3l-3.dll
Copy the "fftw_lib" folder into your project's folder
Tell the linker to include the .lib files in your project:
Project > Properties > Configuration Properties > Linker > Entry > Additional dependencies =
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib
Add the libraries' path to the Linker and Compiler:
Project > Properties > Configuration Properties > Linker > General > Additional libs directory =
C:\Users\Username\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib
Project > Properties > Configuration Properties > C/C++> General > Additional include directories =
C:\Users\Username\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib
Include the path where the dll libs are:
Project > Properties > Configuration Properties > Debugging > Environment =
PATH=C:\Users\Username\Documents\Visual Studio 2017\Projects\MP_2\MP_2\fftw_lib
The End!
Maybe at runtime it will ask you for fftw dlls missing. I got that case and simply putted 'em into system32 folder.
I am using Visual Studio 2013 Express on 64-bit Windows 7 and had the same issue as you while trying to build for x64. The problem was that I generated the .lib and .exp using lib.exe from "Developer Command Prompt for VS2013" shell. When I regenerated .lib and .exp from "VS2013 x64 Cross Tools Command Prompt" shell, then all references were resolved.