LINUX.ORG.RU

как слинковать исходник из fpc с c программой


0

1

Доброго дня уважаемые

есть программа написана на C но несколько функций используются из написанной не мной программы на Pascal. Раньше я использовал для их компиляции gpc но после но после обновления Дебиана его в репозиториях не осталось собирать в ручную тоже проблемно тк он работает только со старыми версиями gcc. Потому я решил что надо переходить на fpc но тут встал вопрос ликовки у gpc была libgpc которая просто добавлялось и все проблемы снимались у fpc я такого не нашел. Тыкаясь в слепую пришел к следующему

тестовый сисходник Pascal

unit PasTest;
Interface

  type recT=record
          i   : integer;
          arr : array [1..5] of double;
       end;

procedure P(var rec :recT );
Implementation

procedure P(var rec :recT );
Begin
   rec.i := 2;
   rec.arr[1]:=0.1;
   rec.arr[2]:=0.2;
End; { P3 }
End.

его компиляция

###@###:~/tmp/testPas$ fpc PasTest.pas
Free Pascal Compiler version 2.6.0-9 [2013/04/14] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling PasTest.pas
22 lines compiled, 0.0 sec
вывод nm
###@###:~/tmp/testPas$ nm PasTest.o
0000000000000018 D INIT_PASTEST_RECT
0000000000000000 T PASTEST_P$RECT
0000000000000028 D RTTI_PASTEST_DEF1
0000000000000048 D RTTI_PASTEST_RECT
                 U RTTI_SYSTEM_DOUBLE
                 U RTTI_SYSTEM_SMALLINT
0000000000000000 D THREADVARLIST_PASTEST
0000000000000008 D _$PASTEST$_Ld1
0000000000000010 D _$PASTEST$_Ld2

исходник на с

#include<stdio.h>

typedef struct {
  long int i;
  double arr[5];
} recT;

void PASTEST_P(recT *rec);

int main(int argc, char **argv, char **envp)
{
  recT rec;

  PASTEST_P(&rec);  
  printf ("i=%Ld, arr[0] = %e\n",rec.i, rec.arr[1]);

}
результат

###@###:~/tmp/testPas$ gcc test.c PasTest.o
/tmp/ccPITSiR.o: In function `main':
PasTest.o:(.data+0x3a): undefined reference to `RTTI_SYSTEM_DOUBLE'
PasTest.o:(.data+0x56): undefined reference to `RTTI_SYSTEM_SMALLINT'
collect2: error: ld returned 1 exit status

где находятся эти RTTI_SYSTEM_DOUBLE и RTTI_SYSTEM_SMALLINT и как вообще это делается если делается?

Заранее спасибо.

Ответ на: комментарий от mashina

Спасибо Ваш комментарий мне очень помог. Может скажете что-нибудь по существу вопроса?

SherKhan ()

Сначала русскому научись, мало кому понравится читать эту твою тарабарщину

batekman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.