Blog de Abelardo Jara Berrocal: Ubuntu, electronica y software libre

Marzo 28, 2009

Usando el compilador de Microsoft Visual C++ 2005/2008 en Ubuntu Linux

Archivado en: Programacion C++ en Linux, Programacion C++ en Windows — Abelardo Jara @ 7:51 pm

En Ubuntu Linux ya tenemos GCC 4.2 para programar en C++ pero hay ocasiones en que queremos asegurarnos que nuestro codigo compila tanto en Linux como en Windows. Sin embargo lamentablemente Wine aun no puede ejecutar Microsoft Visual C++ 2005.

Sin embargo, un amigo hizo un truco para poder ejecutar solo el compilador y el enlazador del Visual C++ 2005 bajo Wine y con excelentes resultados, es posible compilar y crear ejecutables desde Linux usando el compilador del Visual C++ 2005.

Su reporte esta aqui:

WineHQ – Visual C++ 8.0 (2005)

Primero lo que necesitamos tener es una instalacion valida de Microsoft Visual C++ 2005 en algun Windows. Necesitaras copiar a tu directorio de Wine los siguientes directorios

  • c:/Program Files/Microsoft Visual Studio 8/VC/include
  • c:/Program Files/Microsoft Visual Studio 8/VC/lib
  • c:/Program Files/Microsoft Visual Studio 8/VC/bin
  • c:/Program Files/Microsoft Visual Studio 8/Platform SDK/Include
  • c:/Program Files/Microsoft Visual Studio 8/Platform SDK/Lib

PASO 0: Verifica que tienes instalado wine

$ sudo apt-get install wine

$ winecfg —-> Elige como version Windows XP y acepta

PASO 1: Primero crea las carpetas de destino dentro de tu instalacion de Wine:

mkdir -p $HOME/.wine/drive_c/Program\ Files/Microsoft\ Visual\ Studio\ 8/VC
mkdir -p $HOME/.wine/drive_c/Program\ Files/Microsoft\ Platform\ SDK\ for\ Windows\ Server\ 2003\ R2/

Debes haber instalado antes Wine y haberlo ejecutado una vez al menos.

PASO 2: Ahora, necesitaras las librerias para ejecutar Visual C++ 2005. Eso lo arreglamos usando Winetricks (ES UN SCRIPT PARA RECUPERAR DLLs de Windows):

$ wget http://www.kegel.com/wine/winetricks

Le damos permisos de ejecucion:

$ chmod +x ./winetricks

Y si quisieramos ya instalar una determinada libreria, podriamos hacerlo directamente. Por ejemplo:

$ sh winetricks corefonts vcrun6 vcrun2005sp1

PASO 3: Listo, ahora copia el archivo (de la otra maquina o de la particion de Windows):

C:\Program Files\Microsoft Visual Studio 8\CommoN7\IDE\mspdb80.dll —-> a esta carpeta —–> $HOME/.wine/drive_c/windows/system32

PASO 4: Copia las carpetas bin, lib e include que estan dentro de:

c:/Program Files/Microsoft Visual Studio 8/VC/ —–> a esta carpeta ———–>

$HOME/.wine/drive_c/Program\ Files/Microsoft\ Visual\ Studio\ 8/VC

PASO 5: Copia las carpetas Include y Lib que estan dentro de:

c:/Program Files/Microsoft Visual Studio 8/Platform SDK/ ——> a esta carpeta ———–>

$HOME/.wine/drive_c/Program\ Files/Microsoft\ Platform\ SDK\ for\ Windows\ Server\ 2003\ R2/

PASO 6: Marca como ejecutables el compilador y el enlazador de Visual C++ 2005:

chmod +x “/home/[tu nombre de usuario]/.wine/drive_c/Program Files/Microsoft Visual Studio 8/VC/bin/link.exe”

chmod +x “/home/[tu nombre de usuario]/.wine/drive_c/Program Files/Microsoft Visual Studio 8/VC/bin/cl.exe”

PASO 7: Anhade variables necesarias de entorno para Visual C++:

En mi caso anhadi estas lineas a mi .bashrc (tienes que ponerlas cerca de las lineas donde esta definidos PATH, IMPORTANTE: no es anhadirlas al final).

gedit ~/.bashrc y copia y pega esto:

#This is for Visual C++ 2005
export MSVC=”c:/Program Files/Microsoft Visual Studio 8/VC/”
export MSSDK=”c:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/”
export INCLUDE=”c:/Program Files/Microsoft Visual Studio 8/VC/include:c:/Program Files/Microsoft\Platform SDK for Windows Server 2003 R2/Include”
export PATH=$PATH:”/home/[tu usuario]/.wine/drive_c/Program Files/Microsoft Visual Studio 8/VC/bin”
export LIB=”c:/Program Files/Microsoft Visual Studio 8/VC/lib” #:c:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Lib”

alias clc=’cl.exe /c /I”c:/Program Files/Microsoft Visual Studio 8/VC/include” /I”c:/Program Files/Microsoft\Platform SDK for Windows Server 2003 R2/Include” /EHsc ‘

alias cll=’cl.exe /I”c:/Program Files/Microsoft Visual Studio 8/VC/include” /I”c:/Program Files/Microsoft\Platform SDK for Windows Server 2003 R2/Include” /EHsc ‘

Listo graba y sale. Cierra la consola y iniciala de nuevo.

Listo, ahora cuando quieras compilar un programa tipeas

$ cll myprograma.cpp /omyprograma.exe

Espero que les sea muy util.

Y aqui tienen el resultado de un programa compilando en Ubuntu Hardy :)

Compilando un programa con Visual C++ 2005 en Ubuntu Linux

Compilando un programa con Visual C++ 2005 en Ubuntu Linux

Y podemos ejecutar el programa directamente de la linea de comandos con: $wine miprograma.exe

La salida por ejemplo se ve aqui:

Ejecutando el programa con Wine y compilado con Visual C++ 2005

Ejecutando el programa con Wine y compilado con Visual C++ 2005

Si les interesa saber mas de las opciones de linea de cl.exe (el compilador) y link.exe (el enlazador) del Visual C++ 2005, aqui les dejo una tabla:

Para cl.exe:

     /Od
     /D "WIN32"
     /D "_DEBUG"
     /D "_WINDOWS"
     /D "_USE_MATH_DEFINES"
     /D "_CRT_SECURE_NO_DEPRECATE"
     /FD
     /MT
     /Fo"Debug\\"
     /Fd"Debug\vc80.pdb"
     /W2 /nologo
     /c
     /TP
     /errorReport:prompt

Para link.exe:

     /VERBOSE
     /OUT:"Debug\pipmak .exe"
     /INCREMENTAL
     /NOLOGO
     /LIBPATH:"D:\Projects\Lib"
     /LIBPATH:"D:\Projects\Microsoft Platform SDK\Lib"
     /MANIFEST
     /MANIFESTFILE:"Debug\pipmak .exe.intermediate.manifest"
     /NODEFAULTLIB
     /DEBUG
     /ASSEMBLYDEBUG
     /PDB:"d:\Projects\pipmak-SVN\Debug\pipmak .pdb"
     /SUBSYSTEM:WINDOWS
     /MACHINE:X86
     /ERRORREPORT:PROMPT
      vorbisfile_static_d.lib vorbis_static_d.lib ogg_static_d.lib zlib.lib
      physfs.lib opengl32.lib glu32.lib OpenAL32.lib
      SDL_ttf.lib SDL.lib SDLmain.lib SDL_image.lib
      oldnames.lib msvcrtd.lib libcmtd.lib lua50.lib
      kernel32.lib user32.lib gdi32.lib winspool.lib
      comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib

Espero que les sea util :)

Blog de WordPress.com.