[fpc-pascal] Linking object file
Darius Blaszyk
dhkblaszyk at zeelandnet.nl
Thu Mar 20 11:22:22 CET 2014
Thanks Tomas,
I did a quick test and it works perfectly!
Regards, Darius
Tomas Hajny schreef op 20 mrt '14:
> On Wed, March 19, 2014 23:49, Darius Blaszyk wrote:
>
> Hi,
>
>> I was wondering if it's possible to link FPC object files by using the $Link directive? At least I have troubles in getting this to work and therefore I'm asking here. Please consider the minimal example I have attached to this email. When linking the object file that implements the test_proc procedure I get the following compiler output: Hint: Start of reading config file C:lazarusfpc2.6.2binx86_64-win64fpc.cfg Hint: End of reading config file C:lazarusfpc2.6.2binx86_64-win64fpc.cfg Free Pascal Compiler version 2.6.2 [2014/02/28] for x86_64 Copyright (c) 1993-2012 by Florian Klaempfl and others Target OS: Win64 for x64 Compiling test.pp Linking test.exe test.pp(8,1) Error: Undefined symbol: TEST_INT_TEST_PROC test.pp(8,1) Fatal: There were 1 errors compiling module, stopping What is needed in the test_impl.pas file so the linker can find the implemented function? Do I need to create a library and export the function perhaps?
>
> Basically, you have two options:
>
> 1) Provide the import declaration with the mangled name (i.e. the name
> really stored within the .o file). This may possibly change between
> different FPC versions, but if you intend to link to an existing object
> file, you would already know which one was used. In your case, this would
> mean changing line 7 in test_int.pas to:
>
> procedure test_proc; external name 'TEST_IMPL_TEST_PROC';
>
> (the mangled name may be found either by using -a when compiling
> test_impl.pas and looking into the generated test_impl.s or e.g. by using
> 'objdump -t test_impl.o'.
>
> 2) Specify your own name during rather than relying on some mangling rules
> - change line 7 in test_impl.pas to:
>
> procedure test_proc; export alias: 'My_Test_Proc';
>
> and then line 7 in test_int.pas needs to change accordingly to:
>
> procedure test_proc; external name 'My_Test_Proc';
>
> Tomas
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal [1]
Links:
------
[1] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20140320/359cb8b8/attachment.html>
More information about the fpc-pascal
mailing list