Mathias hat geschrieben: Mo 28. Nov 2022, 17:54
Falsch. Das weist den Linker an das Symbol XOpenDisplay (bzw. _XOpenDisplay je nach Plattform) in der Bibliothek libX11.so (im Fall vom Linux) zu suchen. C Header sind in keinem Fall involviert.
Verstehe ich das jetzt richtig, sämtliche libs befinden sich im Ordner /usr/lib/x86_64-linux-gnu.
Wie
Socke geschrieben hat, können die Bibliotheken prinzpiell an beliebigen Orten liegen. Solange sie in den Verzeichnissen in
$PATH oder
$LD_LIBRARY_PATH zu finden sind, können sie auch einfach vom Linker gefunden werden, ansonsten muss man die Verzeichnisse beim Kompilieren mit angeben.
Mathias hat geschrieben: Mo 28. Nov 2022, 17:54
Und bei external schreibt man die Lib rein, ohne das lib und .so. Im Beispiele von von X11 so
libX11.so ?
Und im Ordner /usr/include befinden sich die Header, welche ober nur der C/C++-Programmierer braucht ?
Korrekt.
Mathias hat geschrieben: Mo 28. Nov 2022, 17:54
Und die external mit "name", kann man auf x-beliebige *.so anwenden ?
Auch solche, welche in Pascal kompiliert wurden ?
Ja. Und auch für DLLs unter Windows und DYLIBs unter macOS.
Mathias hat geschrieben: Mo 28. Nov 2022, 17:54
Also solche, welche man in Lazarus unter Project/Projecteinstellungen/Compilereinstellungen/Pfade/Bilbiotheken eingibt ?
Das ist genau der Pfad, den ich oben meine.
Mathias hat geschrieben: Di 29. Nov 2022, 14:08
Ich habe folgendes probiert:
Code: Alles auswählen
$ grep FPC_SYSC_NANOSLEEP -i -I -R
fpcsrc/rtl/unix/bunxh.inc: Function FpNanoSleep (req : ptimespec;rem : ptimespec):cint; external name 'FPC_SYSC_NANOSLEEP';
fpcsrc/rtl/bsd/ossysc.inc:Function FpNanoSleep(req : ptimespec;rem : ptimespec) : cint; [public, alias : 'FPC_SYSC_NANOSLEEP'];
fpcsrc/rtl/linux/ossysc.inc:Function FpNanoSleep(req : ptimespec;rem : ptimespec):cint; [public, alias : 'FPC_SYSC_NANOSLEEP'];
fpcsrc/rtl/beos/ossysc.inc:Function FpNanoSleep(req : ptimespec;rem : ptimespec) : cint; [public, alias : 'FPC_SYSC_NANOSLEEP'];
grep: lazarus/components/chmhelp/lhelp/lhelp.app/Contents/MacOS/lhelp: Datei oder Verzeichnis nicht gefunden
Müsste da nicht irgendwo eine Funktion mit dem der Bezeichnung 'FPC_SYSC_NANOSLEEP' auffindbar sein ?
Wie
Socke geschrieben hat: ist doch da.
Mathias hat geschrieben: Di 29. Nov 2022, 14:08
Und wen ich selbst eine Bibliothek, welche in C/C++ lesbar ist, müsste ich es so machen ?
Code: Alles auswählen
library Project1;
function Test(x, y: integer): integer;
begin
Result := x + y;
end;
begin
end.
Lies dir Mal ein paar Tutorials zum Schreiben von Bibliotheken in FPC oder Delphi durch. Die wichtigsten Punkte sind, dass du deine Funktionen auch exportieren musst (Stichwort
exports-Abschnitt) und du musst die richtige Aufrufkonvention verwenden (besonders wichtig auf
i386-Plattformen, da es dort einen ziemlichen Zoo gibt). Der Standard für C/C++ ist hierbei
cdecl.