0

Hi
I am trying to cross compile a simple program for Windows CE using CodeBlocks. I am using mingw32ce (part of CEGCC) which is a set of tools and libraries for building WCE programs on XP. And some WCE SDL libraries I found here:
http://users.uoa.gr/~knakos/scummvm/libraries/release-0-10-0/wince-gcc-libs.tar.bz2

I have succeded in building and running the following program.

Link Libraries:
C:\wince-sdl-gcc-libs\libs\lib\SDL.lib
C:\mingw32ce\arm-mingw32ce\lib\libmingw32.a

Compiler search dirs:
C:\wince-sdl-gcc-libs\libs\include
C:\cygwin\include
C:\MinGW\include

Linker search dirs:
C:\wince-sdl-gcc-libs\libs\lib
C:\cygwin\lib
C:\MinGW\lib

C compiler: arm-mingw32ce-gcc-4.4.0.exe
Linker: arm-mingw32ce-gcc-4.4.0.exe

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <windows.h>
#include <SDL/SDL.h>

const int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_DEPTH = 32;
SDL_Surface *gScreen;

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
//MessageBoxW(0, L"HELLO!", L"H3LLO!", 0);
//fprintf(stderr,"%s: %s %s","FUNCTION","filename","EOL");
Uint8 *p;int x = 10;int y = 20;

	SDL_Init(SDL_INIT_VIDEO);      /* Initialize the screen / window */
    gScreen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);      /* Make p point to the place we want to draw the pixel */
    p = (Uint8 *)gScreen->pixels + y * gScreen->pitch + x * gScreen->format->BytesPerPixel;      /* Draw the pixel! */
    *p=0xff;      /* update the screen (aka double buffering) */
    SDL_Flip(gScreen);
    SDL_Delay(10000);
    return(0);
}

using -v on the Linker command I get:

-------------- Build: Debug in WinCETest ---------------
Compiling: main.c
Linking console executable: bin\Debug\WinCETest.exe
Using built-in specs.
Target: arm-mingw32ce
Configured with: /home/cartman/cegcc/src/gcc-4.4.0/configure --with-gcc --with-gnu-ld --with-gnu-as --build=i686-pc-cygwin --target=arm-mingw32ce --host=i686-pc-cygwin --prefix=/opt/mingw32ce --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers --disable-__cxa_atexit
Thread model: win32
gcc version 4.4.0 (GCC) 
COMPILER_PATH=/cygdrive/c/mingw32ce/bin/../libexec/gcc/arm-mingw32ce/4.4.0/:/cygdrive/c/mingw32ce/bin/../libexec/gcc/:/cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0/../../../../arm-mingw32ce/bin/
LIBRARY_PATH=/cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0/:/cygdrive/c/mingw32ce/bin/../lib/gcc/:/cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0/../../../../arm-mingw32ce/lib/
COLLECT_GCC_OPTIONS='-v' '-LC:/wince-sdl-gcc-libs/libs/lib' '-LC:/cygwin/lib' '-LC:/MinGW/lib' '-o' 'bin/Debug/WinCETest.exe'
 /cygdrive/c/mingw32ce/bin/../libexec/gcc/arm-mingw32ce/4.4.0/collect2.exe -Bdynamic -o bin/Debug/WinCETest.exe /cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0/../../../../arm-mingw32ce/lib/crt3.o -LC:/wince-sdl-gcc-libs/libs/lib -LC:/cygwin/lib -LC:/MinGW/lib -L/cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0 -L/cygdrive/c/mingw32ce/bin/../lib/gcc -L/cygdrive/c/mingw32ce/bin/../lib/gcc/arm-mingw32ce/4.4.0/../../../../arm-mingw32ce/lib obj/Debug/main.o C:/wince-sdl-gcc-libs/libs/lib/SDL.lib C:/mingw32ce/arm-mingw32ce/lib/libmingw32.a -lmingw32 -lgcc -lgcc_eh -lceoldname -lmingwex -lcoredll -lcoredll -lmingw32 -lgcc -lgcc_eh -lceoldname -lmingwex -lcoredll
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings

But if I add the fprintf() then I get the following Link error:

obj/Debug/main.o: In function `WinMain':
C:/Documents and Settings/me/My Documents/gp2x/projects/WinCETest/main.c:38: undefined reference to `_iob'
collect2: ld returned 1 exit status

I am a bit lost. I would rather avoid installing a MSoft IDE.

Peter

1
Contributor
1
Reply
2
Views
7 Years
Discussion Span
Last Post by rhubarb65
0

Hi
I solved it

I was accidentally linking in non ARM libraries. Even if this built, it would obviously fail when I tried to run it on the ARM device.

The fix was to remove some Linker search directories that pointed to non ARM libraries (eg cygwin)

Peter

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.