FreePascal und uClibc
FreePascal und uClibc
Hi,
ich müsste gegen die uClibc ( http://www.uclibc.org/" onclick="window.open(this.href);return false; ) linken. Kann FreePascal das? Wenn ja wie? Da ich noch "neu" in der sache bin, blicke ich da noch so richtig durch. Also einen switch habe ich nicht gefunden. Und google schmeisst auch nix vernünftiges raus.
Im moment gehe ich hin und linke alle lib ins programm. Daruch wird es natürlich mehr als doppelt so gross.
Vielen dank im voraus
ich müsste gegen die uClibc ( http://www.uclibc.org/" onclick="window.open(this.href);return false; ) linken. Kann FreePascal das? Wenn ja wie? Da ich noch "neu" in der sache bin, blicke ich da noch so richtig durch. Also einen switch habe ich nicht gefunden. Und google schmeisst auch nix vernünftiges raus.
Im moment gehe ich hin und linke alle lib ins programm. Daruch wird es natürlich mehr als doppelt so gross.
Vielen dank im voraus
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: FreePascal und uClibc
Also wenn ich dich Richtig verstehe funktionierts bei dir schon, und du bindest alles in etwa ein wie
Wenn dem so ist, dann hilft dir das Dynamische Linken, da kannst du nur die dazu linken die du brauchst.
Code: Alles auswählen
procedure Showm(Value: PChar); external{$IFDEF Win32} 'libdemo.dll'{$ELSE} 'libdemo.so'{$ENDIF}; {cdecl; -- Mus zum einbinden von C Libs rein !!}
Code: Alles auswählen
Uses
dynlibs;
type
TShowm = procedure(Value: PChar);
var
tmpString: string;
lib: TLibHandle = 0;
Showm: TShowm = nil;
..
initialization
tmpString := IncludeTrailingBackslash(ExtractFilePath(Paramstr(0))) + {$IFDEF Win32} 'libdemo.dll'{$ELSE} 'libdemo.so'{$ENDIF};
lib := LoadLibrary(tmpString);
if lib = 0 then
raise exception.create('Error could not init Library');
Showm := TShowm(GetProcAddress(lib, 'Showm'));
if not assigned(Showm) then
raise exception.create('Error could not load Method in Library');
finalization
if Lib <> 0 then
UnloadLibrary(lib);
{$ENDIF}
--
Just try it
Just try it
Re: FreePascal und uClibc
Erstmal danke für diene mühe. Aber das meine ich nicht. Ich schreibe etwas, das auf einem Zielsystem läuft, wo es nur die uclibc gibt. Ich möchte aus platzgründen nicht alle libs einlinken, so wie ich es im moment mache. Und dynamisch linken geht nicht, weil es die grosse lib nicht auf dem zielsystem gibt.
Es ging mir nun erstmal darum ob ich mein programm dort überhaupt ans laufen bekomme. Im moment klappt das halt nur wenn ich Statisch linke. Deswegen die frage, ob freepascal auch gegen die uclibc linken kann. Oder ob es eine andere möglickeit gibt die uclibc zu nehmen.
Ich habe schon versucht fpc auf einem Buildroot mit uclibc zu erstellen. Bin aber kläglich gescheitert.
Es ging mir nun erstmal darum ob ich mein programm dort überhaupt ans laufen bekomme. Im moment klappt das halt nur wenn ich Statisch linke. Deswegen die frage, ob freepascal auch gegen die uclibc linken kann. Oder ob es eine andere möglickeit gibt die uclibc zu nehmen.
Ich habe schon versucht fpc auf einem Buildroot mit uclibc zu erstellen. Bin aber kläglich gescheitert.
Re: FreePascal und uClibc
Was willst du erreichen?
Auf welchem System gibt es keine libc.so bzw. glibc.so?
Warum willst du die direkt anzapfen?
Wozu uClibc? Ist eine libuclibc.so auf dem Zielsystem vorhanden?
Was ist falsch an Corpsman's Vorschlag?
Auf welchem System gibt es keine libc.so bzw. glibc.so?
Warum willst du die direkt anzapfen?
Wozu uClibc? Ist eine libuclibc.so auf dem Zielsystem vorhanden?
Was ist falsch an Corpsman's Vorschlag?
Re: FreePascal und uClibc
Hi, ich habs mal durchnummeriert. Dann ist das antworten einfacher.theo hat geschrieben:1: Was willst du erreichen?
2: Auf welchem System gibt es keine libc.so bzw. glibc.so?
3: Warum willst du die direkt anzapfen?
4: Wozu uClibc?
5: Eine libuclibc.so auf dem Zielsystem vorhanden?
6: Was ist falsch an Corpsman's Vorschlag?
1. Ein kleines programm schreiben.
2. Router (libc.so -> libuClibc-0.9.28.so)
3. Keine ahnung, macht wohl pascal. Aber welche unit das macht weiss ich nicht.
4. Damit ist die RouterSoft gebaut
5. Nein.
6. Ist Dynamisch so wie ich das verstanden habe. Da die libs nicht da sind wird es nicht gehen.
Hier noch die ldd ausgabe:
linux-gate.so.1 => (0xb77cc000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb77a8000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb77a4000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7648000)
/lib/ld-linux.so.2 (0xb77cd000)
Oder könnte man vielleicht in dem Buildroot nur linken? Wenn ja wie?
Gruss
Re: FreePascal und uClibc
5 und 2 widersprechen sich imho. Die libuClibc-0.9.28.so ist also doch da. Dann kannst du auch dynamisch linken.
Für so ein Zeug würde ich die FPC Entwickler fragen: http://lists.freepascal.org/mailman/listinfo/fpc-devel/" onclick="window.open(this.href);return false;
Für so ein Zeug würde ich die FPC Entwickler fragen: http://lists.freepascal.org/mailman/listinfo/fpc-devel/" onclick="window.open(this.href);return false;
Re: FreePascal und uClibc
Ich habe nun Free Pascal in einer Buildroot umgebung laufen. Nun linkt er "richtig". Problem ist aber das ich ein Segmentation fault bekomme. Hat jemand ne idee??? Muss ich bei fpc noch einen bestimmten parameter übergeben?
Danke im voraus
:~# ldd test1
libpthread.so.0 => /lib/libpthread.so.0 (0xb77d0000)
libdl.so.0 => /lib/libdl.so.0 (0xb77cd000)
libc.so.0 => /lib/libc.so.0 (0xb7783000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0xb77e6000)
Danke im voraus
:~# ldd test1
libpthread.so.0 => /lib/libpthread.so.0 (0xb77d0000)
libdl.so.0 => /lib/libdl.so.0 (0xb77cd000)
libc.so.0 => /lib/libc.so.0 (0xb7783000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0xb77e6000)
Code: Alles auswählen
program test1;
{$mode objfpc}{$H+}
{$DEFINE UseCThreads}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes,Crt
{ you can add units after this };
begin
WriteLn('Test');
end.
Re: FreePascal und uClibc
Um das thema abzuschliessen (hätte ich fast vergessen). Ich hatte eine lib vergessen. Das muss wie folgt aussehen.....
Code: Alles auswählen
# ldd test1
libpthread.so.0 => /lib/libpthread.so.0 (0xb7736000)
libdl.so.0 => /lib/libdl.so.0 (0xb7732000)
libc.so.0 => /lib/libc.so.0 (0xb76fe000)
librpc.so.0 => /lib/librpc.so.0 (0xb76ee000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0xb774a000)