[fpc-pascal] Calling function pointer to main program

Jonas Maebe jonas at freepascal.org
Fri Jan 3 19:35:54 CET 2020


On 03/01/2020 18:33, Ryan Joseph via fpc-pascal wrote:
>> On Jan 2, 2020, at 2:57 PM, Ryan Joseph <genericptr at gmail.com> wrote:
>>
>> extern C_LINKAGE int SDL_main(int argc, char *argv[]);
>>
>> which they call from within the iOS event loop and that calls the programs main functions which was defined using -XMSDL_main
> I still can't figure out how -XM works. Can anyone provide an example? When ever I try to use it I get linker errors.
> 
> I've basically just started with a trimmed down program that does nothing but define an external new main function (like SDL does). From the SDL sources I thought that it would now point to the main program body but I can't get past linker errors.
> 
> fpc main.pas -XMuser_main
> 
> 
> 
> Undefined symbols for architecture x86_64:
>   "_P$TEST_$$_USER_MAIN$LONGINT$PCHAR$$LONGINT", referenced from:
>       _PASCALMAIN in main.o
>   "_main", referenced from:
>       start in crt1.10.5.o
>      (maybe you meant: _user_main)
> 
> 
> program test;
> uses
>   ctypes;
> 
> function user_main(argc: cint; argv: pchar): cint; external;

You're missing a "cdecl;" here.

> begin
>   user_main(0,'');
> end.

Additionally, you will also have to link in an object/library that does
define a regular "main" function. And note that this will only work on
libc-based targets (afaik only Darwin, Solaris, and AIX at this point).


Jonas


More information about the fpc-pascal mailing list