Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo compilar un programa C en DOS?

¿Cómo compilar un programa C en DOS?

VC6 es solo un entorno de desarrollo integrado que puede llamar fácilmente a compiladores, enlazadores, archivos de encabezado y archivos de biblioteca. Si se pueden integrar los controladores de edición y compilación, se puede mejorar la eficiencia del desarrollo.

VC6 tiene soporte predeterminado para aplicaciones Win32 normales y no hay un asistente de proyecto de instalación para el controlador. De hecho, el controlador es solo un sistema escrito en C, por lo que compilarlo no es un problema en teoría, pero en la práctica es un poco problemático.

A continuación se describe cómo compilar controladores del sistema para varias plataformas (incluidas las plataformas de 64 bits).

Primero veamos cómo compilar la versión de 32 bits del controlador. Primero, prepare algunas herramientas necesarias para la compilación:

1. Instale VC6

. 2. Instalar La pregunta sobre DDK (¿cuál?) es en realidad muy simple, pero muchas personas no la entienden. Por supuesto, cuanto más nuevo sea el DDK, mejor será, por ejemplo. Nunca podremos compilar un sistema de 64 bits con el DDK 2000, porque no viene con una biblioteca ni un compilador de 64 bits, por lo que elegimos el último, el DDK 2003 (WDK también está disponible), que admite muchas plataformas. (AMD64, IA64, 2000, XP, VC6, VC6, VC6, VC6, VC6). IA64, 2000, XP, 2003 son todos compatibles).

Bien, ahora nuestro sistema ha instalado la herramienta de desarrollo más poderosa VC6 y el último DDK. ¡Compilar controladores para varias plataformas en VC no es un problema!

Para comenzar, asumiendo que nuestro DDK está instalado en el directorio C:\2003DDK, entonces encontraré que hay muchos ejemplos de controladores (seleccione todos durante la instalación), elegimos C:\2003DDK\src\ wdm \usb\bulkusb como nuestro ejemplo experimental.

Paso uno:

Abra VC, cree un proyecto de aplicación Win32 y luego seleccione Un proyecto vacío (estoy usando la versión en inglés de VC, le sugiero que también cambie a la versión en inglés). version) ), es decir, cree un proyecto Win32 vacío, asigne al proyecto el nombre Bulkusb y haga clic en Finalizar.

Segundo paso:

Reemplace todos los archivos en C:\2003DDK\src\wdm\usb\bulkusb\sys (aquí está el código del controlador y el exe es el programa de usuario). independientemente de ello) al directorio del proyecto BulkUSB. Luego importe .h, .c, .rc a los directorios correspondientes en VC.

Paso 3:

Luego comience a configurar las opciones del proyecto para compilar estos códigos en sys. Necesitamos usar el DDK al compilar, por lo que primero debemos establecer algunas rutas para que VC llame en Tool-gt; Opciones-gt; Directorios de vc (configuraciones básicas: ¡asegúrese de que todas las rutas establecidas a continuación estén al frente!).

Establecer ruta de inclusión:

C:\2003DDK\INC

C:\2003DDK\INC\CRT

C:\2003DDK \INC\WNET

C:\2003DDK\INC\DDK\WNET

C.\2003DDK\INC\DDK\WDM\WNET

En este orden Añadir. ¿Observa el directorio WNET aquí? Este es el archivo de encabezado más reciente de 2003. De hecho, también puede elegir el directorio wxp o w2k, pero los archivos de encabezado en wnet son los más completos porque el sistema mejora constantemente y algunas API nuevas solo se definen en archivos de encabezado nuevos.

Por supuesto, es mejor elegir el archivo de encabezado correspondiente para compilar el controlador para el sistema correspondiente, pero he intentado usar wnet para compilar el controlador en 2000, porque normalmente no necesitamos esas API recién agregadas.

Establecer ruta de biblioteca:

C:\2003DDK\LIB

C:\2003DDK\LIB\CRT\I386

C: \2003DDK\LIB\WNET\I386

C:\Igual que arriba

Establecer archivo ejecutable:

C:\2003DDK\LIB\WNET\I386 / /Esta es la ruta al compilador, el directorio que contiene cl.exe, link.exe, porque estamos compilando un controlador de 32 bits, así que agréguelo y colóquelo en el primer elemento.

En general, siempre que Include, Lib y el compilador estén configurados, no habrá problemas para compilar ningún archivo. También puede intentar instalar usted mismo el último SDK 2003 y compilar aplicaciones Win32 a 64 bits.

Paso 4:

Comience a ingresar la configuración del proyecto, primero configure C/C, ingrese la siguiente cadena en Definiciones del preprocesador:

Ingrese en Versión:

_X86_=1, i386=1, STD_CALL, WIN32=100, _ _DEBUG

La convención de llamada en Generación de código usa __stdcall, (esto es necesario para el controlador)

La versión de depuración tiene una opción de compilación especial /GZ (tenga en cuenta que está en mayúsculas, ¡no elimine las minúsculas! Elimínela; de lo contrario, se producirán problemas como errores de enlace y enlaces chkesp que no funcionarán.

Paso 5:

Comience a configurar la página de enlace, cambie el nombre del archivo de salida a la extensión sys.

En el módulo objeto/biblioteca en General, complete varias bibliotecas llamadas por el driver:

ntoskrnl.lib hal.lib usbd.lib

Luego vaya a la salida en el símbolo del punto de entrada:

Complete DriverEntry

El siguiente paso es agregar manualmente algunas opciones de enlace en Opciones del proyecto: nativo /SECCIÓN: INIT, d /IGNORAR: 4198, 4010, 4037, 4039, 4065, 4070, 4078, 4087, 4089, 4221

Elimine las siguientes opciones:

/subsystem.Windows

/machine representa el tipo de máquina de destino, /driver representa el controlador y /subsystem:native también representa el controlador.

Bien, ¡podemos compilar el controlador de 32 bits!

Entonces, ¿qué pasa si queremos compilar el controlador de 64 bits? Aquí debemos tener en cuenta que hay dos tipos de 64. Controladores de bits, uno es AMD64 y el otro es AMD64. Debe elegir la plataforma de destino que actualmente es la más popular.

De hecho, compilar a 64 bits también es muy simple. Simplemente cambie ligeramente la configuración de 32 bits. Tomemos como ejemplo la compilación del controlador AMD de 64 bits (copia la configuración del proyecto VC). Por cierto, haga una copia de Release y Debug de 32 bits, cámbieles el nombre a ReleaseAMD64 y DebugAMD64 y luego modifíquelos según la copia):

1 Modifique las dos rutas de biblioteca:

C :\2003DDK\LIB\CRT\I386 a: C:\2003DDK\LIBCRT\amd64

C:\2003DDK\LIB\WNET\I386 a: C:\2003DDK\lib\wnet \I386

C:\2003DDK\lib\WNET\I386 a: C:\2003DDK\lib\wnet\amd64

2 Modificar la ruta del compilador:

C: \2003DDK\BIN\X86

Cambiar a:

C:\2003DDK\bin\win64\x86\amd64

C:\2003DDK \BIN\X86

Esta es la ruta al compilador. BIN\X86 //Esta línea también debería existir

3 Modifique la definición del preprocesador en C/C para:

Release //Release/Release/Release/Release/ Release/Release. /Release:

Escriba lo siguiente para liberar AMD64:

_AMD64_, AMD64, STD_CALL, WIN32=100, _WIN32_ WINNT=0x0501, WINVER=0x0501, NDEBUG

Ingrese en DebugAMD64:

_AMD64_, AMD64, STD_CALL, WIN32=100, _WIN32_WINNT=0x0501, WINVER=0x0501, _ DEBUG

4. opciones del proyecto manualmente: cambie /machine:IX86 a /machine:amd64

5. En teoría, no hay ningún problema al configurar aquí, pero aún así se producirá un error de enlace: símbolo externo sin resolver __security_cookie, siempre que bufferoverflowK. lib se agrega a la biblioteca de enlaces (¿por qué bufferoverflowK.lib? Consulte aquí: /kb/894573), funcionará normalmente. Descargue mi ejemplo de proyecto modificado: enlace de descarga.

La mayoría de las configuraciones anteriores se pueden guardar en el archivo del proyecto VC (*.dsp). Además, también puede configurar la ruta de inclusión, la ruta de la biblioteca y la ruta del compilador. algunos otros también quedarán durante el proyecto, lo que causará problemas en la compilación de la aplicación, y deberá cambiarlos uno por uno antes de poder regresar. El conmutador de directorios fue desarrollado para cambiar rápidamente entre estas rutas.

El conmutador de directorios fue desarrollado para cambiar rápidamente entre estas rutas.