我怎样才能编译程序员Dvorak?

时间:2010-07-29 08:46:17

标签: c open-source linker driver wdk

我正在尝试编译开源项目Programmer Dvorak。问题是它有点旧,并且不使用当前版本的构建工具构建。

您可以在我的project's Google Code page上看到我在线修改的完整源代码。 Revision 2是原始项目中未修改的源文件。 Revision 3是我做出所有重大改变的地方。您可以看到diff between the two revisions here

剩下的唯一明显问题是一些LINK警告:

  • LNK4254(例如section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.) - 我问了here问题的独立版本。
  • LNK4210(例如.CRT section exists; there may be unhandled static initializers or terminators

如何修复这些警告? 我可以忽略它们吗?

尽管有这些警告,它仍会产生一个exe。但是,如果我继续运行它,它将无法正确安装,我需要求助于系统还原才能再次安装正式版本。

这可能是因为警告或仅仅是因为我没有正确修改项目。

我还需要做些什么来使这个项目可以安装?


构建过程(以及对我的修改的解释):

它说你需要Windows DDK,但似乎Windows Driver Kit已取代它,所以我得到了它。我只安装了“Build Environments”。

1。根据{{​​3}},您应该运行:

build-layout && build-installer

2。 Readme.txt正在运行。

我必须修改此文件(build-layout.bat):

  • WinDDK路径已被修改,因为我有一个较新的版本(MOD-1)
  • set PATH= ... %WINDDK%\bin\x86\x86;已添加,因为link.exe位于(MOD-2)
  • set INCLUDE=中,%WINDDK%\inc\wxp已更改为%WINDDK%\inc\api,因为wxp文件夹不存在,我最好的猜测是api文件夹是需要,因为它包含kbd.hsee the diff here使用(MOD-3)
  • 对于set LIB=%WINDDK%\lib\crt已修改为%WINDDK%\lib\crt\i386,因此可以找到libcmt.lib。见下面的MOD-7。 (MOD-4)

3。 kbddvp.c正在运行。

我必须修改此文件(fkbddvp.mak):

  • 变量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已移除以取消警告see the diff here(即/OPT:NOWIN98 is no longer supported),为LNK4224(MOD-10)
  • 我没有使用不存在的libc.lib,而是使用libcmt.lib。我读过suggested by Bobby,建议使用此文件。 (MOD-7)
  • 我使用cabarcthis post,而不是使用过时的实用程序makecab。我用makecab-dir.ddf来了解如何使用这个新实用程序执行相同的逻辑。 (MOD-8)

4。 my best guess正在运行。

我必须修改此文件(build-installer.bat):

  • 这也是使用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

7 个答案:

答案 0 :(得分:1)

AMD64?我认为那是问题所在。

也许问题只是你同时使用32或64 ISA的文件。

像:

kbddvp32.dll kbddvp64.dll

尝试使用适用于您的平台ISA的那些并取出其余部分。

答案 1 :(得分:1)

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最像是一个“poltical”警告(在一些lib的新版本中被宣布为“只读”的部分)

我假设您正在为x86和x64运行2个完全干净且分离的构建。如果没有,你必须这样做,不管是什么,先做。所谓的混合构建会导致所有孩子出现随机故障并且无法修复 - 只需要单独构建。

答案 2 :(得分:1)

我之前合并了部分(必须,为了我们正在做的事情)。它可能会变得棘手,我认为我们遇到的一个问题也会让你感到困惑:你正在将.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编译的,但这也适用于以后的代码。)

答案 3 :(得分:1)

您会注意到所有这些命令行参数的来源都是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"

答案 4 :(得分:1)

链接的源代码缺少sources.inc文件,这使得很难使用最新版本的WDK构建它。包含的.bat文件非常无用,它们只能在作者的机器上运行。我使用WDK版本6001.18002的以下步骤进行了简洁的构建:

  • 将.cab文件解压缩到c:\ temp \ dvorak
  • 导航到WDK的src \ input \ layout文件夹
  • 将sources.inc文件复制到c:\ temp
  • 编辑kbddvp.c并注释#define WIN32_LEAN_AND_MEAN指令
  • 开始+所有程序,Windows驱动程序工具包,WDK xxx.xxx,构建环境,Windows Vista,blabla x86免费。选择你自己的。
  • cd c:\ temp \ dvorak
  • NMAKE

不需要长时间,干净的构建。没有实际测试,配备两只左手。


您需要的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

答案 5 :(得分:1)

launcher是一个启动.inf文件的高架安装的程序, 禁用重定向,以便显示真正的%SystemRoot%目录 即使它在Wow64中运行,也可以进行32位进程。

它使用的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程序,从而消除了该阶段的任何错误。它 仅用于更容易的再分配,并不重要。

答案 6 :(得分:0)

从版本1.2.6开始,也可以在Windows 7 64位计算机上使用Visual Studio 2013 Community Edition Update 4构建布局。