[fpc-devel]Linking with C

Sergey Korshunoff Sergey.Korshunoff at p5.f2666.n5020.z2.fidonet.org
Fri Aug 31 21:50:23 CEST 2001


Hello!

A problems with current version of FPC:

1) Linking a C library to pascal program is done by code (t_linux.pas):
   s:=librarysearchpath.FindFile('crtbegin.o',found)+'crtbegin.o';
   if found then
     LinkRes.AddFileName(s);
   s:=librarysearchpath.FindFile('crti.o',found)+'crti.o';
   if found then
     LinkRes.AddFileName(s);

This is wrong: crti.o must go _before_ crtbegin.o
(in t_beos.pas we have a right sequence, but why this is wrong for other
targets?)

==================================================================
-+- t_linux.pas.bak     Wed Jun 13 08:36:28 2001
+++ t_linux.pas Fri Aug 31 20:17:10 2001
@@ -324,10 +324,10 @@
   { try to add crti and crtbegin if linking to C }
   if linklibc then
    begin
-     s:=librarysearchpath.FindFile('crtbegin.o',found)+'crtbegin.o';
+     s:=librarysearchpath.FindFile('crti.o',found)+'crti.o';
      if found then
       LinkRes.AddFileName(s);
-     s:=librarysearchpath.FindFile('crti.o',found)+'crti.o';
+     s:=librarysearchpath.FindFile('crtbegin.o',found)+'crtbegin.o';
      if found then
       LinkRes.AddFileName(s);
    end;
==================================================================

2) There is a code in t_linux.pas:
     { be sure that libc is the last lib }
     if linklibc then
      LinkRes.Add('-lc');
     { when we have -static for the linker the we also need libgcc }
     if (cs_link_staticflag in aktglobalswitches) then
      LinkRes.Add('-lgcc');     { be sure that libc is the last lib }

But I can not get -lgcc in link.res ( FPC -s -XS) ???
After looking in sources:
   cs_link_staticflag is not set by -XS or by -XX, but is set by
   _nondocumented_ flag -Xt

What is purpose of -Xt swith? Why we can not use -XS and -XX
insteed of -Xt ? If -Xt is a right thing, then why it is
not in FPC help output (FPC -h)?

Regards,
    Sergey Korshunoff





More information about the fpc-devel mailing list