我正在尝试编译开源项目Programmer Dvorak 。 问题是它有点旧,并没有使用当前版本的构建工具构建。
您可以在我的项目的Google代码页上看到我在线修改的完整源代码。 版本2是原始项目中未修改的源文件。 修订版3是我做出所有重大更改的地方。 您可以在此处看到两个修订版之间的差异 。
剩下的唯一明显问题是一些LINK警告:
我该如何修复这些警告? 我可以忽略它们吗?
尽管有这些警告,它仍然会产生一个exe。 但是,如果我继续运行它,它将无法正确安装,我需要求助于系统还原才能再次安装正式版本。
这可能是因为警告或仅仅是因为我没有正确修改项目。
我还需要做些什么来使这个项目可以安装?
构建过程(以及对我的修改的解释):
它说您需要Windows DDK,但似乎Windows驱动程序工具包已经取代它,所以我得到了它。 我只安装了“Build Environments”。
1.根据Readme.txt
,您应该运行:
build-layout && build-installer
2.运行build-layout.bat
。
我不得不修改这个文件( 参见这里的差异 ):
3.运行fkbddvp.mak
。
我不得不修改这个文件( 参见这里的差异 ):
4.运行build-installer.bat
。
我不得不修改这个文件( 参见这里的差异 ):
完整的输出
如果你想看到它,这是完整的输出:
>build-layout && build-installer "C:WinDDK7600.16385.1binx86x86cl.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:WinDDK7600.16385.1binx86amd64cl.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:WinDDK7600.16385.1binx86x86cl.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 71).aspx – LNK4210
注意:LNK4210可能是由-NOENTRY造成的,但只有你的代码可以告诉它使用它是对还是LNK4254最可能是一个“poltical”警告(在某些lib的新版本中声明为“只读”的部分)
我假设您正在为x86和x64运行2个完全干净且分离的构建。 如果没有,你必须这样做,不管是什么,先做。 所谓的混合构建会导致所有孩子出现随机故障并且无法修复 – 只需要单独构建。
我之前合并了部分(必须,为了我们正在做的事情)。 它可能会变得棘手,我认为我们遇到的一个问题也是你的问题:你正在将.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编译的,但是这也适用于以后的代码。)
您会注意到所有这些命令行参数来源的来源是https://levicki.net/articles/tips/2006/09/29/HOWTO_Build_keyboard_layouts_for_Windows_x64.php 。 使用它的原因是KLC 1.3不支持64位操作系统。 KLC 1.4增加了对64位操作系统的支持。 这意味着如果您可以使用支持所需function的KLC创建布局,则应该使用它。
但是,如果您需要更高级的function并希望自己编译这些文件,则需要找出用于KLC 1.4的新实用程序和参数。 你列出的那些已经过时,适用于KLC 1.3。
我使用Process Monitor来确定运行哪些实用程序,以及向它们发送哪些命令行参数。 在这里,他们按照他们运行的顺序:
"C:Program FilesMicrosoft Keyboard Layout Creator 1.4bini386kbdutool.exe" -n -x -u ...tmpYourKeyboard.txt C:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386link.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~1MICROS~1.4libi386 -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~1MICROS~1.4bini386link.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~1MICROS~1.4libi386 -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~1UserLOCALS~1Templnk1F.tmp" /readonly "YourKeyboard.res" "C:Program FilesMicrosoft Keyboard Layout Creator 1.4bini386kbdutool.exe" -n -i -u ...tmpYourKeyboard.txt C:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386IA64cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386IA64cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386link.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~1MICROS~1.4libia64 -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~1MICROS~1.4bini386link.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~1MICROS~1.4libia64 -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~1UserLOCALS~1Templnk20.tmp" /readonly "YourKeyboard.res" "C:Program FilesMicrosoft Keyboard Layout Creator 1.4bini386kbdutool.exe" -n -m -u ...tmpYourKeyboard.txt C:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386amd64cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386amd64cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386link.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~1MICROS~1.4libamd64 -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~1MICROS~1.4bini386link.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~1MICROS~1.4libamd64 -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~1UserLOCALS~1Templnk21.tmp" /readonly "YourKeyboard.res" "C:Program FilesMicrosoft Keyboard Layout Creator 1.4bini386kbdutool.exe" -n -o -u ...tmpYourKeyboard.txt C:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386cl.exe -nologo -IC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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~1MICROS~1.4bini386rc.exe -r -iC:PROGRA~1MICROS~1.4inc -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:WINDOWSsystem32cmd.exe /c C:PROGRA~1MICROS~1.4bini386link.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~1MICROS~1.4libi386 -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~1MICROS~1.4bini386link.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~1MICROS~1.4libi386 -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~1UserLOCALS~1Templnk22.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文件的高架安装,禁用重定向,以便即使在Wow64中运行,也会向32位进程显示真正的%SystemRoot%
目录。
它使用的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%libcrti386
的引用。
另请注意,如果您作为管理员选择从资源管理器中的上下文菜单中为kbddvp.inf
文件安装,则应该能够在没有launcher
程序的情况下进行设置,从而消除该阶段的任何错误。 它仅用于更容易的再分配,并不重要。
从版本1.2.6开始,也可以在Windows 7 64位计算机上使用Visual Studio 2013 Community Edition Update 4构建布局。
以上就是c/c++开发分享我怎样才能编译程序员Dvorak?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562788.html