Einsprungpunkt in lib wird nicht gefunden

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Einsprungpunkt in lib wird nicht gefunden

Beitrag von Mathias »

Eines vorweg, dieser Test löst ein SIGSEV aus,

Will ich folgendes kompilieren, motzt er, das er nicht linken kann.

Code: Alles auswählen

program project1;
uses
  Unit1;
begin
  g_param_spec_double(nil, nil, nil, 0, 0, 0, 0);
end.

Code: Alles auswählen

unit Unit1;

interface

function G_PARAM_SPEC_DOUBLE(pspec: Pointer): Pointer;

function g_param_spec_double(Name: PChar; nick: PChar; blurb: PChar; minimum: double; maximum: double; default_value: double; flags: integer): Pointer; cdecl; external 'libgobject-2.0';

implementation

function G_PARAM_SPEC_DOUBLE(pspec: Pointer): Pointer;
begin
  G_PARAM_SPEC_DOUBLE := nil;
end;

end.
Vertausche ich folgende Zeilen, dann wird es einwandfrei kompiliert.

Code: Alles auswählen

function g_param_spec_double(Name: PChar; nick: PChar; blurb: PChar; minimum: double; maximum: double; default_value: double; flags: integer): Pointer; cdecl; external 'libgobject-2.0';

function G_PARAM_SPEC_DOUBLE(pspec: Pointer): Pointer;
Ich habe das Gefühl, das der Compilier das overload nicht richtig verarbeitet.

Ist dies ein Bug oder ist dies so gewollt ?

Im Anhang noch das Testprogramm.
Dateianhänge
lib_test.zip
(2.13 KiB) 71-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Einsprungpunkt in lib wird nicht gefunden

Beitrag von Zvoni »

Hatten wir nicht vor kurzem das Thema mit "external" und "public"?
bei deiner importierten Funktion wird durch das "external" der Assembler-Name konkret definiert, während bei deiner eigenen wohl was schief geht.
hast du mal versucht, deine lokale funktion alles in klein zu schreiben, und mit "cvar" am Ende das zu erzwingen?

Aber ich gebe dir aus dem Bauch heraus recht: Riecht nach Bug
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einsprungpunkt in lib wird nicht gefunden

Beitrag von Mathias »

Hatten wir nicht vor kurzem das Thema mit "external" und "public"?
Da hatte ich wohl ein komischen Alias aus dem C-Header gelöscht, wahrscheinlich hiess der "external" wen man ihn entschlüsselt hätte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten