Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Собрать проект на WDK


Автор: Mechatronic 10.2.2016, 18:57
Доброго времени суток.
Прошу консультации по следующему вопросу. Студент принес код на WinAPI, добытый из интернета (архив приложен), который должен собираться с помощью WDK, но возникают ошибки во время линковки *exe файла - линкер не находит стандартные функции вроде printf, malloc.
Сборка запускается следующей командой в директории src (согласно README  в архиве).
Код

build -cefgw


Подскажите, пожалуйста, какие манипуляции нужно выполнить, чтобы линкер "Подхватил" нужные библиотеки.

Спасибо.

Автор: xvr 10.2.2016, 19:10
Код

#include "ntddk.h"
#include "stdio.h"
Так не бывает - в ядре нет стандартных сервисов ОС, равно как и нет стандартной библиотеки ввода вывода.

Цитата(Mechatronic @  10.2.2016,  18:57 Найти цитируемый пост)
линкер не находит стандартные функции вроде printf, malloc.

Нету их, совсем  smile . Используйте эквиваленты, которые есть в kernel сервисах ОС

Автор: Mechatronic 10.2.2016, 19:14
Цитата(xvr @ 10.2.2016,  19:10)
Так не бывает - в ядре нет стандартных сервисов ОС, равно как и нет стандартной библиотеки ввода вывода.

Спасибо за ответ. Это ожидаемо. Но известно, что автор кода его как-то собирает - бинарник так же имеется в архиве. Не подскажете, как это может объясняться?

Автор: xvr 11.2.2016, 16:32
В сорце sector.c не замечено никаких функций из stdio.h (ни printf ни malloc). Есть только строковые функции, а они в каком то виде в ядре есть (видимо прямо такие и есть  smile )
То, что в тексте есть #include "stdio.h" видимо не препятствует сборке (stdio.h где то по путям есть, хотя она и не нужна)

А при сборке того, что лежит в папке exe stdio.h и все его производные вполне допустимы - это обычная консольная программа

И libc подается, судя по логу от сборки:

Код

1>      link -out:..\..\bin\chk_wxp_x86\i386\DiskSector.exe -machine:ix86 @C:\DOCUME~1\Pankaj\LOCALS~1\Temp\nma03676.
1>Microsoft (R) Incremental Linker Version 7.00.9210
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>
1>-MERGE:_PAGE=PAGE
1>-MERGE:_TEXT=.text
1>-SECTION:INIT,d
1>-OPT:REF
1>-OPT:ICF
1>-IGNORE:4010,4037,4039,4065,4070,4078,4087,4089,4198,4221
1>-INCREMENTAL:NO
1>-FULLBUILD
1>/release
1>-NODEFAULTLIB
1>/WX
1>-debug:FULL
1>-debugtype:cv
1>-version:5.1
1>-osversion:5.1
1>/opt:nowin98
1>-STACK:0x40000,0x1000
1>-merge:.rdata=.text
1>/tsaware
1>-subsystem:console,4.00
1>-base:@C:\WINDDK\2600~1.110\bin\coffbase.txt,usermode
1>-entry:mainCRTStartup
1>objchk_wxp_x86\i386\sector_io.obj
1>C:\WINDDK\2600~1.110\lib\wxp\i386\libc.lib              <<<<<<<<<<<<<<<<<<
1>C:\WINDDK\2600~1.110\lib\wxp\i386\advapi32.lib
1>C:\WINDDK\2600~1.110\lib\wxp\i386\kernel32.lib

Автор: DarthTon 14.2.2016, 18:03
WDK может нормально собирать юзермодные приложения. Там даже есть поддержка CRT и STL, только немного специфичная. Просто в sources файле надо добавить ключ USE_MSVCRT=1.

Автор: Mechatronic 15.2.2016, 19:57
В /src/exe/sector_io.c есть printf, malloc.

Добавлено через 3 минуты и 35 секунд
Цитата(DarthTon @ 14.2.2016,  18:03)
WDK может нормально собирать юзермодные приложения. Там даже есть поддержка CRT и STL, только немного специфичная. Просто в sources файле надо добавить ключ USE_MSVCRT=1.

Спасибо за подсказку! Попробуем.

Автор: Mechatronic 15.2.2016, 20:24
Студент говорит, что все работает - собрали с предложенным ключом.
Спасибо большое за обсуждение!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)