Compilar BennuDG en Windows (MSYS)

Started by proteo, March 26, 2014, 10:01:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

proteo

Buenas, como va? Me quiero adentrar mas en BennuGd y debugearlo para comprender algunas cosas. El caso es que estoy intentando contruirlo desde MSYS con build-win32.sh, build-win32-cross.sh y todo sale un asco. Baje las librerias separadamente y copie todos los DLL a la carpeta /mingw/lib y los .h a /migw/include pero no logro construirlo. Tambien probé con hacer ./configure y make en cada una de las carpateas y nada. Pasan cosas como esta

./build-win32.sh

$ ./build-win32.sh
### Building 3rd party software ###
gcc -DRAND       -fPIC -o rpw rpw.o  libdes.so
libdes.so(.text+0x160):crtstuff.c: multiple definition of `atexit'
D:/DATOS/msys/1.0/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../crt2.o(.text+0x2c0):crt1.c: first defined here
libdes.so(.text+0x190):crtstuff.c: multiple definition of `_onexit'
D:/DATOS/msys/1.0/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../crt2.o(.text+0x2d0):crt1.c: first defined here
libdes.so(.text+0x1c0):crtstuff.c: multiple definition of `__do_sjlj_init'
D:/DATOS/msys/1.0/mingw/bin/../lib/gcc/mingw32/3.4.2/crtbegin.o(.text+0x0):crtstuff.c: first defined here
collect2: ld returned 1 exit status
make: *** [rpw] Error 1
*** ABORT ***


./build-win32-cross.sh

$ ./build-win32-cross.sh
Current settings.

Install root/Working dir = /usr/i586-mingw32msvc
Tool locations = /usr/i586-mingw32msvc/bin
Host/Target = i586-mingw32msvc / i586-mingw32msvc

CC = i586-mingw32msvc-gcc
CXX = i586-mingw32msvc-g++
AR = i586-mingw32msvc-ar
STRIP = i586-mingw32msvc-strip
RANLIB = i586-mingw32msvc-ranlib
CFLAGS = -O2 -I/usr/i586-mingw32msvc/include -I/usr/i586-mingw32msvc/include/libxml2 -I/usr/i586-mingw32msvc/include/SDL
LDFLAGS = -L/usr/i586-mingw32msvc/lib
PKG_CONFIG =
### Building 3rd party software ###
/bin/rm -f libdes.dll || /bin/true
i586-mingw32msvc-gcc -fPIC --shared -o libdes.dll cbc_cksm.o cbc_enc.o ecb_enc.o des_enc.o fcrypt_b.o            fcrypt.o set_key.o pcbc_enc.o xcbc_enc.o qud_cksm.o cbc3_enc.o cfb64ede.o cfb64enc.o cfb_enc.o ecb3_enc.o enc_read.o enc_writ.o ofb64ede.o ofb64enc.o ofb_enc.o rand_key.o read_pwd.o read2pwd.o rpc_enc.o  str2key.o supp.o -L/usr/i586-mingw32msvc/lib
make: i586-mingw32msvc-gcc: Command not found
make: *** [libdes.dll] Error 127
*** ABORT ***


./configure en el directorio core

...
...
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
./configure: CFLAGS+= -finline-functions -fno-strict-aliasing -I/usr/local/include: No such file or directory
checking for ZLIB... no
configure: error: in `/Proyectos/bennugd-code-324/core':
configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

Alternatively, you may set the environment variables ZLIB_CFLAGS
and ZLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See `config.log' for more details



En este ultimo no se porque da ese error ya que el zLib esta instalado, es mas, como los .dll  no funcionaban empece a construir por separado las librerias y libpng la pedia como dependencia, por lo que previamente tambien fue construida e instalada.

No hay forma de construir bennuGD en Codeblocks o Dev c++?

Muchas gracias.
Saludos.

SplinterGU

#1
cross es para correr desde linux con el cross compiler.

build-win32.sh es para msys.

necesitas msys + mingw

no tenes que copiar las librerias, sino compilar e instalar... ./configure && make install

a menos que te des maña para meterlas donde corresponde y tocar los archivos que sean necesarios a mano

el sdl-config (o sdl.pc, no recuerdo) hay que quitarle el sdlmain de las libs y todo lo referente a ello.

posiblemente tengas que reconstruir el zlib.pc que va en el directorio pkgconfig dentro de lib (podria ser /usr/lib/pkgconfig)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

proteo

Quote from: SplinterGU on March 27, 2014, 02:24:15 AM
cross es para correr desde linux con el cross compiler.

build-win32.sh es para msys.

necesitas msys + mingw

no tenes que copiar las librerias, sino compilar e instalar... ./configure && make install

a menos que te des maña para meterlas donde corresponde y tocar los archivos que sean necesarios a mano

el sdl-config (o sdl.pc, no recuerdo) hay que quitarle el sdlmain de las libs y todo lo referente a ello.

posiblemente tengas que reconstruir el zlib.pc que va en el directorio pkgconfig dentro de lib (podria ser /usr/lib/pkgconfig)

Muchas gracias Sprinter, voy a probar y te cuento.

proteo

Quote from: SplinterGU on March 27, 2014, 02:24:15 AM
cross es para correr desde linux con el cross compiler.

build-win32.sh es para msys.

necesitas msys + mingw

no tenes que copiar las librerias, sino compilar e instalar... ./configure && make install

a menos que te des maña para meterlas donde corresponde y tocar los archivos que sean necesarios a mano

el sdl-config (o sdl.pc, no recuerdo) hay que quitarle el sdlmain de las libs y todo lo referente a ello.

posiblemente tengas que reconstruir el zlib.pc que va en el directorio pkgconfig dentro de lib (podria ser /usr/lib/pkgconfig)

Estuve tratando de construir pero hay un error que no puedo solucionar y ya hice todo lo que encontre por la web, y se da con cualquier codigo

Intentando compilar de cualquiera de estas formas


Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -mwindows -lmingw32 -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32 -lSDL -mwindows
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32 -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -mwindows
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status



Da siempre ese maldito error de WinMain@16. Obviamente este error tambien me lo esta dando al construir, por ejemplo, SDL_Mixer. Las librerias de SDL se construyeron e instalaron correctamente.

Te paso alguna vez? tenes idea de que puede ser?

Muchas gracias.
Abrazo.

proteo

Quote from: proteo on March 27, 2014, 04:28:56 PM
Quote from: SplinterGU on March 27, 2014, 02:24:15 AM
cross es para correr desde linux con el cross compiler.

build-win32.sh es para msys.

necesitas msys + mingw

no tenes que copiar las librerias, sino compilar e instalar... ./configure && make install

a menos que te des maña para meterlas donde corresponde y tocar los archivos que sean necesarios a mano

el sdl-config (o sdl.pc, no recuerdo) hay que quitarle el sdlmain de las libs y todo lo referente a ello.

posiblemente tengas que reconstruir el zlib.pc que va en el directorio pkgconfig dentro de lib (podria ser /usr/lib/pkgconfig)

Estuve tratando de construir pero hay un error que no puedo solucionar y ya hice todo lo que encontre por la web, y se da con cualquier codigo

Intentando compilar de cualquiera de estas formas


Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -mwindows -lmingw32 -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32 -lSDL -mwindows
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32 -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lSDL
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -mwindows
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

Javier@Javier-PC ~/Fuentes
$ gcc prueba.c -lmingw32
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status



Da siempre ese maldito error de WinMain@16. Obviamente este error tambien me lo esta dando al construir, por ejemplo, SDL_Mixer. Las librerias de SDL se construyeron e instalaron correctamente.

Te paso alguna vez? tenes idea de que puede ser?

Muchas gracias.
Abrazo.

Te agrego mas info, esto es por ejemplo tratando de construir el SDL_mixer


/bin/sh ./libtool --mode=compile gcc  -I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmai
n=SDL_main -c ./playwave.c  -o build/playwave.lo
gcc -I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -c ./playwave.c  -DDLL
_EXPORT -DPIC -o build/.libs/playwave.o
gcc -I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -c ./playwave.c -o bui
ld/playwave.o >/dev/null 2>&1
/bin/sh ./libtool --mode=link gcc -o build/playwave.exe build/playwave.lo -I/min
gw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -L/mingw/lib -lmingw32 -lSDLmain
-lSDL -mwindows build/libSDL_mixer.la
gcc -o build/.libs/playwave.exe build/.libs/playwave.o -I/mingw/include/SDL -D_G
NU_SOURCE=1 -Dmain=SDL_main -mwindows  -L/mingw/lib /usr/local/lib/libSDLmain.a
build/.libs/libSDL_mixer.dll.a -L/usr/local/lib -lmingw32 /usr/local/lib/libSDL.
dll.a -liconv -luser32 -lgdi32 -lwinmm  -L/usr/local/lib -L/mingw/lib
c:/Mingw/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src
/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
make: *** [build/playwave.exe] Error 1


Lei por ahi que la implementacion para utilizar windows desde MinGW viene separada en uno de los archivos que indicas en el README de los fuentes de BennuGD (w32api-3.8.tar.gz), el mismo lo tengo instalado asi que no se que faltara. Tambien intente quitarle todo lo que hacia referencia a SDL_main dentro de los makefiles y sigue dando el mismo error.

Muchas gracias.
Saludos.

proteo

ME RINDO, probe de todo en MSYS y como no iba para ningun lado, instale el VirtualBox. Primero probé con Ubuntu 13.10 de 64 bits, fuí mitigando dependencia hasta que me encontre con libcrypto, di 2000 vueltas, me baje los fuentes del OpenSSL, lo construi, no funcionaba tampoco. Despues me di cuenta que dentro de la carpeta "3rdparty", esta la carpeta "des-4.04b", donde estaba el des.h y toda la otra historia que necesitaba. Trate de construirlo con make, lo contruyo pero el "make install" no funciono para ningun lado. Acto seguido edite el documento INSTALL de la misma carpeta y segui las indicaciones que ahi decia de ejecutar una seria de programas y luego copie a mano todos los archivos donde iba. Cuando por fin termine, vuelvo a la carpeta "core" a correr el ./configure --build=i686...... y no le gustaba lo que habia. Me puse a navegar un poco y encontre que este problema se solucionaba instalando libssl-dev desde el repositorio, lo instalo y pude pude finalizar la ejecucion dele ./configure. cuando hago el "make" construye un monton de cosas pero en un momento quiere linkear con la maldita lcrypto y tira un "Incompatible, se descarta" y lo mismo me dice con la zlib. Investigue un poco mas y el problema se debia a que Ubuntu era de 64 bits y tenia algunas librerias de 64 otras de 32. So....borro la instalacion de ubunto 13.10 64 e instale denuevo ubuntu 10.10 y empece todo el proceso denuevo. Trate de instalar libssl-dev desde el repositorio luego de haber construido SDL, libpng, SDL_Mixer, zlib y todo los otros requisitos y no lo podia instalar porque habia un conflicto de paquetes (Ubuntu recien instalado) o movidos de lugar. Ultimo intento, trato de bajar Ubuntu 13.10 de 32 bits, no se que pasa con los servidores que estaba bajando a 22 Kb/s. Bajo los brazos :( me conformare con mirar el codigo, la idea era debugear el bennu para comprender todas sus partes. Si alguno puede comprimir su MinGW y su MSYS y pasarmelo o un instructivo de todo lo que le tuvieron que instalar a MSYS para poder construirlo estaria agradecido.

Saludos.

gecko

wow, no sabia que podia llegar a complicarse tanto compilar Bennu.

Hace un tiempo (bastante), Joseba habia publicado unas maquinas virtuales listas para compilar Bennu, aunque despues creo que solo habian quedado ponibles solo para uso "interno".

Habria que intentar conseguirlas devuelta. Lamento no ser de mas ayuda
Torres Baldi Studio
http://torresbaldi.com

proteo

Quote from: gecko on March 28, 2014, 05:17:36 PM
wow, no sabia que podia llegar a complicarse tanto compilar Bennu.

Hace un tiempo (bastante), Joseba habia publicado unas maquinas virtuales listas para compilar Bennu, aunque despues creo que solo habian quedado ponibles solo para uso "interno".

Habria que intentar conseguirlas devuelta. Lamento no ser de mas ayuda

Don't worry, voy intentar bajarme una version actual de ubuntu de 32 bits y probar nuevamente, el corte lo di ayer que estuve 8 horas por reloj tratando de hacerlo, jajajajaja. Ni bien lo consiga publico aca los pasos. El problema son las librerias de terceros y mas todavia cuando te encontras con una historia para construirlas.


SplinterGU

bennugd solo compila en 32bits, necesitas un chroot en 32bits si quieres generar linux... para windows, yo ultimamente uso el build-cross.sh y compilo desde linux, pero evidentemente tenes que corregir los paths a tu distro... yo uso opensuse.

tambien tengo que decir que necesitas los paquetes -dev de todo, sino con instalar las libs no alcanza.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Si yo os contara lo que tuve que liar para poder compilar Bennu en Windows para GP2X con Cygwin y unas toolchains (y lo peor es que eran tanto las oficiales como las no oficiales)... :D
Lo bueno es que, una vez que lo montas, compilar nuevas versiones y/o modificaciones está tirado :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)