[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