init function invocation of drivers compiled into kernel

In Linux if device drivers are built as loadable kernel modules, then upon inserting the device driver kernel module, the kernel calls the init function of the device driver as pointed out by module_init() macro.

How does this work for device drivers that are statically compiled into the kernel ? How is their init function called ?

Insert linux kernel module statically

When building the Linux kernel from sources one could decide if a certain functioninality is statically build into the kernel or packed into a module for dynamic insertion by .config.

If on the other hand I have sources for any 3rd party module, like for example a packaged device driver, is it possible to programatically integrate this code into the kernel statically instead?

Cross compiler not finding SDL package

i am cross compiling a small application which uses libsdl (SDL). I can compile using gcc but not able to with cross compiler. the cross compiler i am using is arm-arago-linux-gnueabi-gcc. error message come as

/arm-arago-linux-gnueabi/bin/ld: cannot find -lSDL
although libsdl1.2-dev is installed an i am getting pkg-config –cflags sdl output as -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL
and output of pkg-config –libs sdl as -lSDL.
Since my native compiler gcc is detecting SDL libs any idea why my cross compiler not able to find the libraries