<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html><body>
<p><br />Thanks Tomas,</p>
<p>I did a quick test and it works perfectly!</p>
<p>Regards, Darius</p>
<p> </p>
<div> </div>
<p>Tomas Hajny schreef op 20 mrt '14:</p>
<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px"><!-- html ignored --><!-- head ignored --><!-- meta ignored -->
<pre>On Wed, March 19, 2014 23:49, Darius Blaszyk wrote:


Hi,</pre>
<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px">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?</blockquote>
<pre>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  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a>
</pre>
</blockquote>
</body></html>