如何编译 Programmer Dvorak?

2024-03-09

我正在尝试编译开源项目程序员德沃夏克 http://www.kaufmann.no/roland/dvorak/。问题是它有点旧,并且不能使用当前版本的构建工具进行构建。

您可以在我的网站上查看完整的源代码以及我在线所做的修改项目的 Google 代码页 http://code.google.com/p/ergo-dvorak-for-developers/. 修订版2 http://code.google.com/p/ergo-dvorak-for-developers/source/browse/?r=2#svn/trunk是原始项目中未修改的源文件。修订版3 http://code.google.com/p/ergo-dvorak-for-developers/source/browse/?r=3#svn/trunk是我做出所有重大改变的地方。你可以看到一个两次修订之间的差异在这里 http://code.google.com/p/ergo-dvorak-for-developers/source/detail?r=3.

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

  • LNK4254 http://msdn.microsoft.com/en-us/library/ms235500(VS.80).aspx (e.g. section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.) -- 我问了这个问题的独立版本here https://stackoverflow.com/questions/3383675/how-can-i-resolve-lnk4254-warnings-in-link-exe.
  • LNK4210 http://msdn.microsoft.com/en-us/library/708by912(VS.71).aspx (e.g. .CRT section exists; there may be unhandled static initializers or terminators)

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

尽管有这些警告,它仍然会生成一个 exe。但是,如果我继续运行它,它就无法正确安装,我需要诉诸系统还原才能再次安装官方版本。

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

我还需要做什么才能使该项目可安装?


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

它说你需要 Windows DDK,但似乎已经取代了它,所以我得到了它。我只安装了“构建环境”。

1.根据Readme.txt http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/README.txt,你应该运行:

build-layout && build-installer

2. build-layout.bat http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/build-layout.bat is run.

我必须修改这个文件():

  • WinDDK path was modified since I have a newer version (MOD-1).
  • set PATH= ... %WINDDK%\bin\x86\x86; was added since link.exe is located there (MOD-2).
  • In set INCLUDE=, %WINDDK%\inc\wxp was changed to %WINDDK%\inc\api, because the wxp folder does not exist, and my best guess is that the api folder was needed since it contains kbd.h, which kbddvp.c http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/kbddvp.c uses (MOD-3).
  • For set LIB=, %WINDDK%\lib\crt was modified to %WINDDK%\lib\crt\i386, so that libcmt.lib could be found. See MOD-7 below. (MOD-4)

3. fkbddvp.mak http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/kbddvp.mak is run.

我必须修改这个文件():

  • The path for the variable CL32 was changed from $(WINDDK)\bin\x86\cl.exe to $(WINDDK)\bin\x86\x86\cl.exe, the first .exe doesn't exist, I believe this is the .exe I'm supposed to use instead. (MOD-5)
  • The path for the variable CL64 was changed from $(WINDDK)\bin\win64\x86\amd64\cl.exe to $(WINDDK)\bin\x86\amd64\cl.exe, this is my best guess as to where the missing .exe is. (MOD-6)
  • -opt:nowin98 removed to suppress warning LNK4224 http://msdn.microsoft.com/en-us/library/w7ys78k4.aspx (i.e. /OPT:NOWIN98 is no longer supported), as suggested by Bobby https://stackoverflow.com/questions/3360746/how-can-i-compile-programmer-dvorak#comment-3552068. (MOD-10)
  • Instead of using the non-existent libc.lib, I'm using libcmt.lib. I read this post http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/45a46d37-5e20-4e1a-87e7-9f9f65986f6a/ which recommends using this file instead. (MOD-7)
  • Instead of using the obsolete utility cabarc, I'm using makecab with makecab-dir.ddf http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/makecab-dir.ddf. I took my best guess https://stackoverflow.com/questions/3375908/how-do-i-convert-a-multi-file-cabarc-command-to-a-corresponding-makecab-command as to how to execute the same logic with this new utility. (MOD-8)

4. build-installer.bat http://code.google.com/p/ergo-dvorak-for-developers/source/browse/trunk/build-installer.bat is run.

我必须修改这个文件():

  • This was also using cabarc and I modified it to use makcab, similar to MOD-8, except that here it creates the .ddf file 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 的文件的问题。

Like:

kbddvp32.dll kbddvp64.dll

尝试使用适合您的平台 ISA 的那些,然后删除其余的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编译 Programmer Dvorak? 的相关文章

  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • boost线程在中断时不打印退出消息

    我有这段代码用于执行三个线程 其中第二个线程应在按 Enter 时中断并打印退出消息 void input val DO STUFF return void process val DO STUFF try cout lt lt waiti
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • 成员初始值设定项列表中的求值顺序是什么?

    我有一个带有一些参数的构造函数 我假设它们是按照列出的顺序初始化的 但在一种情况下 它们似乎是按相反的顺序初始化的 导致中止 当我反转参数时 程序停止中止 下面是我正在使用的语法的示例 a 之前需要初始化b 在这种情况下 你能保证这个初始化
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 通过 MSBuild 调用 cl.exe 时无限期挂起

    我正在尝试在我的 主要是 C 项目上运行 MSBuild 想象一下一个非常庞大的代码库 Visual Studio 2015 是有问题的工具集 Windows 7 SP1 和 VS 2015 更新 2 即使使用 m 1 从而迫使它仅使用一个
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • C++0x 中的新 unicode 字符

    我正在构建一个 API 它允许我获取各种编码的字符串 包括 utf8 utf16 utf32 和 wchar t 根据操作系统 可能是 utf32 或 utf16 新的 C 标准引入了新类型char16 t and char32 t没有这么

随机推荐

  • 无法使用 Java 1.8 在 JBoss 5.1 中编译 JSP 文件

    无法使用 Java 1 8 在 JBoss 5 1 中编译 JSP 文件 能够编译常规Java文件 甚至能够完成没有JSP的Spring项目 如果我们保留这些 JSP 文件的编译类文件 它就可以正常工作 以下是我尝试运行 JSP 文件时遇到
  • 如何使用 React.js 循环 JSX 中的对象

    所以我有一个 React js 组件 我想循环遍历我导入的对象以向其添加 HTML 选项 这是我尝试过的 既丑陋又不起作用 import React from react import AccountTypes from data Acco
  • 使用 Django RequestFactory 而不是表单数据的 POST 文档

    我想构建一个测试中间件的请求 但我不希望 POST 请求始终假设我正在发送表单数据 有没有办法设置request body根据生成的请求django test RequestFactory 即 我想做类似的事情 from django te
  • 自动将 Spring @RequestMapping 注释记录到一个位置?

    Javadoc 非常适合扫描所有源文件并创建 HTML 页面来查看它 我想知道是否有一个类似的工具可以遍历所有 Spring 控制器并收集所有用 RequestMapping 注释的方法并生成一个列出它们的 HTML 页面 有点像开发人员的
  • WKWebView LayoutConstraints 问题

    我创建了一个简单的网络视图应用程序 但有一个小问题我无法修复 它加载第一页没有问题 当我单击第一个输入时 程序崩溃 错误代码如下 2017 10 28 23 50 54 289690 0400 BFI Schools 68425 38856
  • SASL 握手期间出现意外的 METADATA 类型的 Kafka 请求

    我正在尝试使用 SASL Plain 将 Kafka Java 客户端连接到 Kafka 代理 但是当我尝试从生产者发送消息时 Kafka 服务器记录以下错误 2020 04 30 14 48 14 955 INFO SocketServe
  • 使用POSTMAN获取授权码-OAuth2.0

    我正在使用POSTMAN来测试OAuth2 0授权码流程对于 MSGraph 以下是相同的详细信息 验证码网址 https login microsoftonline com tenant id oauth2 authorize https
  • Tomcat环境中如何保存名称-值对?

    我们有一个 servlet 它需要某些变量 如密码 加密盐等 而不是永久保存在文件系统上 这就是我们目前所做的 总结 在初始化期间 Perl 脚本将 ReadMode 设置为 2 以屏蔽 stdout echo 提示用户输入变量 过滤已知文
  • 检查元素上是否有事件侦听器。没有 jQuery [重复]

    这个问题在这里已经有答案了 如果我像下面的代码一样使用内联函数 如何检查元素上是否有事件侦听器 因为我有一个函数可以调用该函数并添加事件侦听器 但它会导致重复的事件侦听器导致它触发函数两次 如果事件侦听器已经存在 我该如何检查它以便阻止它添
  • Rails 3.1 中的无表模型

    好像this http railscasts com episodes 193 tableless model该方法在 Rails 3 1 中不再适用 那么 有人有可行的解决方案吗 其实我已经找到这个了gist https gist git
  • 如何在编辑表单中预先填充collection_check_boxes?

    GitHub 仓库 https github com Yorkshireman mywordlist https github com Yorkshireman mywordlist 我用谷歌搜索了一下这个 我确信有一种方法 可能需要在 h
  • Python 字典中的最后一个键

    我很难弄清楚 Python 字典中最后一个键的语法是什么 我知道对于 Python 列表 人们可能会这样说来表示最后一个 list 1 我还知道可以获取字典的键列表 如下所示 dict keys 但是 当我尝试使用以下逻辑代码时 它不起作用
  • 在 ZF2 中发送带有附件的电子邮件

    如何在 zf2 中发送包含 text plain text html 和附件的电子邮件 我使用此代码通过 smtp 发送电子邮件 files this gt params gt fromFiles smtp new Zend Mail Tr
  • 如何使用 pyPdf 合并两个横向 pdf 页面

    我在使用 pyPdf 合并两个 PDF 文件时遇到问题 当我运行以下代码时 水印 第 1 页 看起来不错 但第 2 页已顺时针旋转 90 度 有什么想法吗 from pyPdf import PdfFileWriter PdfFileRea
  • 语法错误:无法分配给运算符

    def RandomString length distribution string for t in distribution t 1 length t 1 string return shuffle string 这会返回标题中描述的
  • Bash 错误:需要整数表达式

    在下面的部分中 您将看到我尝试在 UNIX 计算机上运行的 shell 脚本以及脚本 当我运行这个程序时 它给出了预期的输出 但它也给出了记录中显示的错误 可能是什么问题以及如何解决它 首先 脚本 usr bin bash while re
  • 如何在IE中使用border-radius.htc制作圆角

    如何在IE中使用border radius htc制作圆角 我在用边界半径 htc http www htmlremix com css curved corner border radius cross browser修复 IE 中的边框
  • JavaScript 中的 Google Analytics API

    我正在使用 Google Analytics Javascript 库让用户查看他们所在的特定页面的地理地图 然而 每次他们尝试这样做时 您都必须经过身份验证过程才能将我的数据显示在我的页面上 我怎样才能找到替代方案 我只想通过页面上的可视
  • 如何强制keras使用tensorflow GPU后端

    我知道这是最受欢迎的问题之一 但到目前为止 没有一个解决方案对我有用 我正在运行一个用以下语言编写的遗留代码tensorflow v1 13 1 and keras v2 2 4 我无法修改代码来运行最新的张量流版本 由于 keras 现已
  • 如何编译 Programmer Dvorak?

    我正在尝试编译开源项目程序员德沃夏克 http www kaufmann no roland dvorak 问题是它有点旧 并且不能使用当前版本的构建工具进行构建 您可以在我的网站上查看完整的源代码以及我在线所做的修改项目的 Google