Ответ 1
AMD64? Я думаю, что это проблема.
Возможно, проблема заключается в том, что вы одновременно используете файлы для 32 или 64 ISA.
Как
kbddvp32.dll kbddvp64.dll
Попробуйте использовать те, для вашей платформы ISA, и вытащите остальные.
Я пытаюсь скомпилировать проект с открытым исходным кодом программист Dvorak. Проблема в том, что она немного устарела и не строится с текущими версиями инструментов сборки.
Вы можете увидеть полный исходный код с изменениями, которые я сделал в Интернете на странице Версия 2 - это немодифицированные исходные файлы из исходного проекта. Редакция 3 - вот где я сделал все существенные изменения. Вы можете увидеть diff между двумя версиями здесь.
Единственными очевидными проблемами, которые остались, являются несколько предупреждений LINK:
section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.
) - я задал отдельную версию вопроса ..CRT section exists; there may be unhandled static initializers or terminators
)Как исправить эти предупреждения? Могу ли я игнорировать их?
Несмотря на эти предупреждения, он все еще производит exe. Если я продолжу и запустил его, он не будет установлен правильно, и мне нужно прибегнуть к восстановлению системы, чтобы снова установить официальную версию.
Это может быть из-за предупреждений или просто потому, что я неправильно модифицировал проект.
Что еще мне нужно сделать, чтобы сделать этот проект доступным?
В нем говорится, что вам нужен Windows DDK, но похоже, что Windows Driver Kit заменил его, поэтому я получил это вместо этого. Я только установил "Build Environment".
Readme.txt
, вы должны запускать:build-layout && build-installer
build-layout.bat
выполняется.Мне пришлось изменить этот файл (посмотреть здесь diff):
WinDDK
путь был изменен, так как у меня есть более новая версия (MOD-1).set PATH=
... %WINDDK%\bin\x86\x86;
добавлен, так как link.exe
находится там (MOD-2).set INCLUDE=
, %WINDDK%\inc\wxp
был изменен на %WINDDK%\inc\api
, потому что папка wxp
не существует, и я полагаю, что папка api
необходима, так как она содержит kbd.h
, которая kbddvp.c
использует (MOD-3).set LIB=
, %WINDDK%\lib\crt
был изменен на %WINDDK%\lib\crt\i386
, так что libcmt.lib
можно найти. См. MOD-7 ниже. (MOD-4)fkbddvp.mak
выполняется.Мне пришлось изменить этот файл (посмотреть здесь diff):
CL32
был изменен с $(WINDDK)\bin\x86\cl.exe
на $(WINDDK)\bin\x86\x86\cl.exe
, первый .exe не существует, я считаю, что это .exe, который я должен использовать вместо этого. (MOD-5)CL64
был изменен с $(WINDDK)\bin\win64\x86\amd64\cl.exe
на $(WINDDK)\bin\x86\amd64\cl.exe
, это мое лучшее предположение о том, где отсутствует отсутствующий .exe. (MOD-6)-opt:nowin98
удалено для предупреждения LNK4224 (т.е. /OPT:NOWIN98 is no longer supported
), поскольку предложил Бобби. (MOD-10)libc.lib
, я использую libcmt.lib
. Я прочитал этот пост, который рекомендует использовать этот файл вместо этого. (MOD-7)cabarc
я использую makecab
с makecab-dir.ddf
. Я взял мое лучшее предположение о том, как выполнить ту же логику с помощью этой новой утилиты. (MOD-8)build-installer.bat
выполняется.Мне пришлось изменить этот файл (посмотреть здесь diff):
cabarc
, и я модифицировал его, чтобы использовать makcab
, аналогично MOD-8, за исключением того, что здесь он создает файл .ddf programmaticaly. (MOD-9)Здесь полный вывод, если вы хотите его увидеть:
>build-layout && build-installer
"C:\WinDDK\7600.16385.1\bin\x86\x86\cl.exe" -nologo -c -I..\inc -Zp8 -Gy
-W3 -WX -Gz -Gm- -EHs-c- -GR- -GF -Zl -Oxs -D_WIN32_WINNT=0x0501 -Fokbddvp32.o
bj kbddvp.c
kbddvp.c
rc kbddvp.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6908.0
Copyright (C) Microsoft Corporation. All rights reserved.
link -machine:ix86 -nologo -dll -base:0x5FFF0000 -subsystem:native -def:
kbddvp.def -noentry -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data
-merge:.bss=.data -ignore:4078,4070 -section:.data,re -stack:0x40000,0x1000 -op
t:ref,icf -release -out:kbddvp32.dll kbddvp32.obj kbddvp.res
Creating library kbddvp32.lib and object kbddvp32.exp
LINK : warning LNK4254: section '.edata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.rdata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.text' (60000020) merged into '.data' (C0000040
) with different attributes
LINK : warning LNK4254: section '.bss' (C0000080) merged into '.data' (C0000040)
with different attributes
"C:\WinDDK\7600.16385.1\bin\x86\amd64\cl.exe" -nologo -c -I..\inc -Zp8 -
Gy -W3 -WX -Gz -Gm- -EHs-c- -GR- -GF -Zl -Oxs -DBUILD_WOW6432 -D_WIN32_WINNT=0x
0501 -Fokbddvp64.obj kbddvp.c
kbddvp.c
link -machine:amd64 -nologo -dll -base:0x5FFE0000 -subsystem:native -def
:kbddvp.def -noentry -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data
-merge:.bss=.data -ignore:4078,4070 -section:.data,re -stack:0x40000,0x1000 -o
pt:ref,icf -release -out:kbddvp64.dll kbddvp64.obj kbddvp.res
Creating library kbddvp64.lib and object kbddvp64.exp
LINK : warning LNK4254: section '.edata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.rdata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.text' (60000020) merged into '.data' (C0000040
) with different attributes
LINK : warning LNK4254: section '.bss' (C0000080) merged into '.data' (C0000040)
with different attributes
"C:\WinDDK\7600.16385.1\bin\x86\x86\cl.exe" -nologo -c -Folauncher.obj l
auncher.c
launcher.c
link -machine:ix86 -nologo -subsystem:windows -release -nodefaultlib -ou
t:launcher.exe launcher.obj kernel32.lib libcmt.lib user32.lib shell32.lib
libcmt.lib(cpu_disp.obj) : warning LNK4210: .CRT section exists; there may be un
handled static initializers or terminators
makecab /F makecab-dir.ddf
Microsoft (R) Cabinet Maker - Version 5.1.2600.5512
Copyright (c) Microsoft Corporation. All rights reserved..
27,686 bytes in 4 files
Total files: 4
Bytes before: 27,686
Bytes after: 8,140
After/Before: 29.40% compression
Time: 0.19 seconds ( 0 hr 0 min 0.19 sec)
Throughput: 144.58 Kb/second
iexpress /N /Q /M kbddvp.sed
1 file(s) copied.
Microsoft (R) Cabinet Maker - Version 5.1.2600.5512
Copyright (c) Microsoft Corporation. All rights reserved..
60,290 bytes in 16 files
Total files: 16
Bytes before: 60,290
Bytes after: 16,876
After/Before: 27.99% compression
Time: 0.27 seconds ( 0 hr 0 min 0.27 sec)
Throughput: 221.34 Kb/second
AMD64? Я думаю, что это проблема.
Возможно, проблема заключается в том, что вы одновременно используете файлы для 32 или 64 ISA.
Как
kbddvp32.dll kbddvp64.dll
Попробуйте использовать те, для вашей платформы ISA, и вытащите остальные.
Ссылки MSDN: http://msdn.microsoft.com/en-us/library/ms235500(VS.80).aspx - LNK4254 http://msdn.microsoft.com/en-us/library/708by912(VS.71).aspx - LNK4210
Примечание. LNK4210 может быть вызван -NOENTRY, но только ваш код может сказать, что это правильно или неправильно LNK4254 наиболее вероятен "политическим" предупреждением (раздел, объявленный как "только для чтения" в новой версии некоторого lib)
И я предполагаю, что вы используете 2 полностью чистых и разделенных сборки для x86 и x64. Если нет, вы должны сделать это независимо от того, что и сделать это сначала. Так называемые смешанные сборки приводят к тому, что все дети случайно выглядят неудачами и там замечают, что их исправлять - просто нужно создавать отдельно.
Я объединил разделы раньше (должен был, для чего мы это делали). Это может показаться сложным, и я думаю, что одна из проблем, которые у нас были, тоже укусила вас: вы объединяете раздел .text
(который содержит исполняемый код) в раздел .data
(а это не так). Раздел .data
не получает исполняемый бит, и опция компоновщика /SECTION (которая должна быть способна заставить ее быть исполняемой), по-видимому, не работает на .data
.
Как мы работали над этим, нужно создать новый раздел, а затем объединить в него все остальные. Вот как:
В одном из ваших *.cpp файлов добавьте следующие строки после строк #include:
#pragma comment(linker, "/section:.merged,ERW")
#pragma code_seg(".merged")
(Вторая строка должна быть выше некоторого фактического кода, чтобы создать новый раздел.)
Затем измените команды -merge:
, чтобы перейти в новый раздел .merged
вместо раздела .data
...
-merge:.edata=.merged -merge:.rdata=.merged -merge:.text=.merged -merge:.bss=.merged
... и добавьте новый, чтобы разместить там раздел .data
:
-merge:.data=.merged
Это должно сделать трюк. Вы по-прежнему будете получать предупреждения о разделах, имеющих разные атрибуты, но теперь вы можете их игнорировать (мы подавляем их, используя /ignore:4254
в компоновщике). Окончательный раздел .merged
будет иметь разрешения на выполнение, чтение и запись, что устранит проблему.
(Наш код скомпилирован с MSVC2005, но это должно работать и в более поздних версиях.)
Вы заметите, что источником того, откуда пришли все эти параметры командной строки, является http://levicki.net/articles/tips/2006/09/29/HOWTO_Build_keyboard_layouts_for_Windows_x64.php. Причина его использования заключалась в том, что KLC 1.3 не поддерживал 64-разрядные операционные системы. KLC 1.4, добавлена поддержка 64-разрядных операционных систем. Это означает, что если вам удастся создать макет с использованием KLC, который поддерживает все функции, которые вы хотите, вы должны использовать это вместо этого.
Если, однако, вам нужны более сложные функции и вы хотите сами их собрать, вам нужно узнать новые утилиты и параметры, которые используются для KLC 1.4. Те, которые вы указали, устарели и предназначены для KLC 1.3.
Я использовал Process Monitor, чтобы выяснить, какие утилиты запущены, и какие параметры командной строки отправляются им. Здесь они находятся в том порядке, в котором они выполняются:
"C:\Program Files\Microsoft Keyboard Layout Creator 1.4\bin\i386\kbdutool.exe" -n -x -u ..\.\tmpYourKeyboard.txt
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\PROGRA~1\MICROS~1.4\bin\i386\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:IX86 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\i386 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:IX86 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\i386 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
cvtres /machine:x86 /nologo /out:"C:\DOCUME~1\User\LOCALS~1\Temp\lnk1F.tmp" /readonly "YourKeyboard.res"
"C:\Program Files\Microsoft Keyboard Layout Creator 1.4\bin\i386\kbdutool.exe" -n -i -u ..\.\tmpYourKeyboard.txt
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\IA64\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\PROGRA~1\MICROS~1.4\bin\i386\IA64\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.srdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text /MACHINE:IA64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\ia64 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.srdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text /MACHINE:IA64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\ia64 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
cvtres /machine:ia64 /nologo /out:"C:\DOCUME~1\User\LOCALS~1\Temp\lnk20.tmp" /readonly "YourKeyboard.res"
"C:\Program Files\Microsoft Keyboard Layout Creator 1.4\bin\i386\kbdutool.exe" -n -m -u ..\.\tmpYourKeyboard.txt
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\amd64\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\PROGRA~1\MICROS~1.4\bin\i386\amd64\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs YourKeyboard.c
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:AMD64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\amd64 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:AMD64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\amd64 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
cvtres /machine:amd64 /nologo /out:"C:\DOCUME~1\User\LOCALS~1\Temp\lnk21.tmp" /readonly "YourKeyboard.res"
"C:\Program Files\Microsoft Keyboard Layout Creator 1.4\bin\i386\kbdutool.exe" -n -o -u ..\.\tmpYourKeyboard.txt
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs -DBUILD_WOW6432 -D_WOW6432_ YourKeyboard.c
C:\PROGRA~1\MICROS~1.4\bin\i386\cl.exe -nologo -IC:\PROGRA~1\MICROS~1.4\inc -DNOGDICAPMASKS -DNOWINMESSAGES -DNOWINSTYLES -DNOSYSMETRICS -DNOMENUS -DNOICONS -DNOSYSCOMMANDS -DNORASTEROPS -DNOSHOWWINDOW -DOEMRESOURCE -DNOATOM -DNOCLIPBOARD -DNOCOLOR -DNOCTLMGR -DNODRAWTEXT -DNOGDI -DNOKERNEL -DNONLS -DNOMB -DNOMEMMGR -DNOMETAFILE -DNOMINMAX -DNOMSG -DNOOPENFILE -DNOSCROLL -DNOSERVICE -DNOSOUND -DNOTEXTMETRIC -DNOWINOFFSETS -DNOWH -DNOCOMM -DNOKANJI -DNOHELP -DNOPROFILER -DNODEFERWINDOWPOS -DNOMCX -DWIN32_LEAN_AND_MEAN -DRoster -DSTD_CALL -D_WIN32_WINNT=0x0500 /DWINVER=0x0500 -D_WIN32_IE=0x0500 /MD /c /Zp8 /Gy /W3 /WX /Gz /Gm- /EHs-c- /GR- /GF -Z7 /Oxs -DBUILD_WOW6432 -D_WOW6432_ YourKeyboard.c
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\PROGRA~1\MICROS~1.4\bin\i386\rc.exe -r -iC:\PROGRA~1\MICROS~1.4\inc -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_UP=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0500 /DWINVER=0x0400 -D_WIN32_IE=0x0400 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DFPO=1 -DNDEBUG -l 409 YourKeyboard.rc
C:\WINDOWS\system32\cmd.exe /c C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:IX86 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\i386 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
C:\PROGRA~1\MICROS~1.4\bin\i386\link.exe -nologo -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:IX86 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -libpath:C:\PROGRA~1\MICROS~1.4\lib\i386 -subsystem:native,5.0 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -osversion:4.0 -version:4.0 /release -def:YourKeyboard.def YourKeyboard.res YourKeyboard.obj
cvtres /machine:x86 /nologo /out:"C:\DOCUME~1\User\LOCALS~1\Temp\lnk22.tmp" /readonly "YourKeyboard.res"
В связанном исходном коде отсутствует файл sources.inc, что затрудняет его создание с использованием последней версии WDK. Входящие .bat файлы совершенно бесполезны, они могут работать только на машине автора. Я получил чистую сборку, используя следующие шаги с WDK версии 6001.18002:
Не требуется много времени, чистая сборка. Никакой фактический тест, оснащенный двумя левыми руками.
Необходимый файл sources.inc:
INCLUDES=..\..\inc
C_DEFINES=
UMTYPE=nt
UMBASE=0x1000000
TARGETLIBS=
DLLDEF=$(TARGETNAME).def
!if $(IA64)
SECTION_ALIGNMENT=0x4000
!endif
LINKER_FLAGS = -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re
LINKER_FLAGS= $(LINKER_FLAGS) /ignore:4254
NO_RDATA_MERGE=1
TARGETTYPE=DYNLINK
USE_NOLIBS=1
BUFFER_OVERFLOW_CHECKS=0
SOURCES=$(TARGETNAME).c $(TARGETNAME).rc
launcher
- это программа для запуска повышенной установки файла .inf,
отключить перенаправление, чтобы выявилась истинная директория %SystemRoot%
к 32-битовому процессу, даже если он работает в Wow64.
Единственная процедура из среды выполнения C, которую она использует, - это ZeroMemory
, которая
макрос расширяется до _memset
. В более ранних версиях проблем не было
при связывании этой одной статики статически, игнорируя инициализацию времени выполнения.
Возможно, это в более поздних версиях, которые запускают предупреждение LNK4210.
Вы можете заменить вызовы на ZeroMemory
с помощью этой функции:
void ZeroFill(IN VOID UNALIGNED *ptr, IN SIZE_T len) {
char *dst;
for( dst = (char*) ptr; len > 0; len--, dst++) {
*dst = 0;
}
}
и удалите ссылку на libc
/libcmt
и каталог %WINDDK%\lib\crt\i386
.
Обратите внимание, что если вы как администратор выберите "Установить" из контекстного меню
в проводнике для файла kbddvp.inf
, вы должны иметь возможность выполнить настройку
без программы launcher
, тем самым устраняя любые ошибки с этого этапа. Это
присутствует только для более легкого перераспределения и не является жизненно важным.
Начиная с версии 1.2.6, макет также может быть создан с использованием обновления Visual Studio 2013 Community Edition Update 4 на 64-разрядной машине Windows 7.