Я пытаюсь скомпилировать проект с открытым исходным кодом программист Dvorak. Проблема в том, что она немного устарела и не строится с текущими версиями инструментов сборки.
Вы можете увидеть полный исходный код с изменениями, которые я сделал в Интернете на странице Версия 2 - это немодифицированные исходные файлы из исходного проекта. Редакция 3 - вот где я сделал все существенные изменения. Вы можете увидеть diff между двумя версиями здесь.
Единственными очевидными проблемами, которые остались, являются несколько предупреждений LINK:
- LNK4254 (например,
section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.
) - я задал отдельную версию вопроса . - LNK4210 (например,
.CRT section exists; there may be unhandled static initializers or terminators
)
Как исправить эти предупреждения? Могу ли я игнорировать их?
Несмотря на эти предупреждения, он все еще производит exe. Если я продолжу и запустил его, он не будет установлен правильно, и мне нужно прибегнуть к восстановлению системы, чтобы снова установить официальную версию.
Это может быть из-за предупреждений или просто потому, что я неправильно модифицировал проект.
Что еще мне нужно сделать, чтобы сделать этот проект доступным?
Процесс сборки (и объяснение моих изменений):
В нем говорится, что вам нужен Windows DDK, но похоже, что Windows Driver Kit заменил его, поэтому я получил это вместо этого. Я только установил "Build Environment".
1. Согласно Readme.txt
, вы должны запускать:
build-layout && build-installer
2. 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)
3. 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)
4. 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