[fpc-pascal] Re: How to build .so with FPC and use it in C program?

KES kes-kes at yandex.ru
Fri Dec 12 12:10:23 CET 2008

Здравствуйте, Seth.

kes# fpc -Sgi -CX -Xs -XX -vewnhi -l -Fu. -olibtest.so test.lpr
Hint: Start of reading config file /usr/local/etc/fpc.cfg
Hint: End of reading config file /usr/local/etc/fpc.cfg
Free Pascal Compiler version 2.2.0 [2008/11/09] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: FreeBSD/ELF for i386
Compiling test.lpr
Linking libtest.so
20 lines compiled, 2.7 sec
2 hint(s) issued
Для продолжения нажмите любую клавишу...
kes# cp libtest.so /usr/lib/
kes# gcc -o ctest -ltest ctest.c
/var/tmp//ccFJez1e.o(.text+0x20): In function `main':
: undefined reference to `SquareNumber'
/usr/lib/libtest.so: undefined reference to `__fpucw'
Для продолжения нажмите любую клавишу...

Вы писали 12 декабря 2008 г., 1:54:51:

SG> I do it all the time. It works fine in Linux as of 2.2.2. There was a
SG> problem in 2.2.0 where initialization and finalization code of units
SG> in your uses section wouldn't get called, but they do now.

SG> ------- test.lpr -------------------------------
SG> library test;

SG> {$mode objfpc}{$H+}

SG> uses
SG>   Classes, SysUtils;

SG>   function SquareNumber(const input : integer) : integer; cdecl;
SG>   begin
SG>     writeln('libtest.so SquareNumber');
SG>     result := input * input;
SG>   end;

SG> exports
SG>   SquareNumber name 'SquareNumber';

SG> begin
SG>   writeln('libtest.so initialization');

SG> end.
SG> ------------------------------------------------

SG> ------- ctest.c -------------------------------
SG> #include <stdio.h>

SG> int SquareNumber(const int input);

SG> main()
SG> {
SG>   int input;
SG>   int output;

SG>   input = 4;
SG>   output = SquareNumber(4);

SG>   printf("%i squared is %i\n", input, output);
SG> }
SG> -----------------------------------------------

SG> To build the .so:

SG> fpc -Sgi -CX -Xs -XX -vewnhi -l -Fu. -olibtest.so test.lpr

SG> To build the c program (make sure the .so is in your link path)

SG> gcc -o ctest -ltest ctest.c

SG> Then run it:

SG> libtest.so initialization
SG> libtest.so SquareNumber
SG> 4 squared is 16


SG> ========================
SG> Computer over. Virus = very yes.

SG> Seth Grover
SG> sethdgrover[at]gmail[dot]com
SG> _______________________________________________
SG> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
SG> http://lists.freepascal.org/mailman/listinfo/fpc-pascal

С уважением,
 KES                          mailto:kes-kes at yandex.ru

More information about the fpc-pascal mailing list