mam pytanko. Jak uruchomić podprogram w Pascalu pod C. Znalazłem kilka ciekawych artykułów o tym , ale podane przykłady z jakiś powodów nie odpalają mi się . Mam prośbę. Czy ktoś mógłbym podać jakiś prosty działajacy przykład.
Zdefiniuj Pascal, C oraz podprogram. Jakie kompilatory, jaki system operacyjny i co rozumiesz przez podprogram: kod unitu, moduł, paczkę (package) czy bibliotekę DLL?
chodzi mi o to że mam napisaną procedure w pascalu w "plik.p" i teraz chce wywołać ją z poziomu C czyli mam "plik2.c" do którego chce załaczyc procedure z "plik.p"
środowisko linux kompilator gpc i gcc
czytalem troszke o tym ze plik.p kompiluje do obiektu przez gpc -c potem w nagłówku plik2.c wpisuje np extern void procedura(); a potem wszystko kompiluje przez gcc -o nazwa_programu plik2.c plik.o , ale tu mam problem wystepuje bład "multiple definition of main " .Domyslam sie ze chodzi o funkcje główna w plik.p ale jak skompilować plik.p do obiektu bez funkcji głównej ?
hm.. a czy w tym pliku .p masz cos ponad definicje funkcji? jak tak to wywal i zostaw tylko kod ktory tworzy funkcje, zadnego "luzno latajacego" programu. sama funkcja
mam samą procedure w pliku .p i gdy kompiluje ja do obiektu wystepuje bład syntax error at end of input
a procedura przykladowa wyglada tak
procedure pas(var i: integer; var r: integer);
begin
i :=9;
r:=9;
end;
o ile mnie pamiec nie myli, program pascalowy konczy sie kropka a nie srednikiem
dam kropke zamiast ; jest bład error: syntax error befor .
1' http://alignment.hep.brandeis.edu/Software/Mixing_Manual.html
2'
funkcja.p
unit Pascal_Library;
interface
function Sqr(x:longreal):longreal; attribute(name='kwadrat');
implementation
function Sqr(x:longreal):longreal;
begin
Sqr:=x*x;
end;
initialization
writeln('Pascal: Initialized Pascal Library.');
end.
test.c
extern double kwadrat(double x);
int main()
{ printf("%lf\n", kwadrat(2.5));
return 0;
}
-sh-3.00# gpc -c funkcja.p
-sh-3.00# gcc -c test.c
-sh-3.00# gcc test.o funkcja.o -lgpc -L/usr/lib/gcc-lib/i686-pld-linux/3.3.6/ -lm
-sh-3.00# ./a.out
nan
i wsio gra
...tylko wynik troche dziwny :))))
no mi tez sie skompilowało tylko też dziwny wynik dało :)) ale na prawde wielkie dzieki . Teraz bede musiał sie pobawic z kompilacja bo to jest wiekszy projekt składajacy sie z kilkunasty modułów ale mam nadzieje ze dam rade :) jeszcze raz dzieki za pomoc
Może chodzi o typ wywołania ? Spróbuj:
extern __pascal double kwadrat(double x);
czy jakoś podobnie, nie wiem jak jest w gcc
punkt, to pewnie wlasnie to. niestety w obecnej chwili nie dam rady sprawdzic, zostawiam autorowi:)