Linker Fehler, beim Einbinden einer .so file [gelöst]

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1676
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:

Linker Fehler, beim Einbinden einer .so file [gelöst]

Beitrag von corpsman »

Guten Morgen,

Ich versuche gerade die Newton Library unter Lazarus zum laufen zu bekommen.

Das Problem ist natürlich das es keine pas file gibt die diese .so Datei ansteuert, nur eine .h file, diese versuche ich gerade zu portieren.

Ich habe das Problem hier bereits gepostet, doch nun bin ich an einem Fehler den ihr Lazarus spezialisten wohl eher lösen könnt.

Ich habe also angefangen die nwetonimport.pas selbst zu schreiben, und versuche mit dieser auf libnewton.so zu zu greifen.

Das Problem ist das ich nun einen "Linker Fehler" bekomme. Und ich nicht verstehe was ich falsch gemacht habe.

Meine Hoffnung, wenn das irgendwann mal Kompiliert dann Libnewton.so nutzen zu können.

Wer kann mir also sagen was ich ändern mus damit der Linker Fehler nicht kommt.

Anbei alles was ihr zum testen benötigt..
Dateianhänge
newtonimport.pas
meine bisherige NewtonImport.pas, einfach in die Uses liste eines Leeren Projectes mit aufnehmen, schon kommt der Linker Fehler.
(652 Bytes) 112-mal heruntergeladen
libNewton.so.tar.gz
die .so file
(497.98 KiB) 93-mal heruntergeladen
Newton.h
Die header Datei, mit der es unter c funktionieren würde.
(52.89 KiB) 88-mal heruntergeladen
Zuletzt geändert von corpsman am Do 13. Aug 2009, 16:32, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
theo
Beiträge: 11103
Registriert: Mo 11. Sep 2006, 19:01

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von theo »

Wo hast du denn die libNewton.so hingelegt?

P.S.:
Und bitte tu nicht doppelt posten:
http://www.delphipraxis.net/post1068406 ... c3#1068406" onclick="window.open(this.href);return false;

Es lesen sowieso früher oder später immer die gleichen Leute das gleiche Zeug. Zwei Versionen der gleichen Frage nerven nur.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von Targion »

Die libNewton.so muss bei deinen Projektdateien oder in /usr/lib liegen.
(Damit das Programm später auch läuft, würde ich die lib nach /usr/lib kopieren)

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1676
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: Linker Fehler, beim Einbinden einer .so file

Beitrag von corpsman »

corpsman@corpsman2:/usr/lib$ ls libN*.so
libNewton.so
corpsman@corpsman2:/usr/lib$
Der Fehler bleibt der selbe...

Und bei Delphipraxis, ists halt so das wenn man nen Post in nem anderem Forum macht gibt man den querlink mit an und das ist OK.
--
Just try it

Benutzeravatar
theo
Beiträge: 11103
Registriert: Mo 11. Sep 2006, 19:01

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von theo »

Falsches Forum:
http://www.pascalgamedevelopment.com/fo ... 451.5;wap2" onclick="window.open(this.href);return false;
http://www.newtondynamics.com/forum/index.php" onclick="window.open(this.href);return false;

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von Targion »

@corpsman: Deine Header-übersetzung scheint fehlerhaft zu sein. Eigentlich brauchst du auch nicht den C-Header übersetzen. Die Windows-Delphi-Bindings sollten mit geringfügigen Änderungen auch unter Linux funktionieren.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1676
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: Linker Fehler, beim Einbinden einer .so file

Beitrag von corpsman »

Leider ist
http://www.newtondynamics.com/forum/vie ... php?t=2758" onclick="window.open(this.href);return false;
nicht erreichbar, ob nun als Member oder nicht.

Und ich hab nun mal alles rausgeworfen was rauswerfbar war und selbst dieser Code :

Code: Alles auswählen

unit NewtonImport;
 
{$mode objfpc}{$H+}
 
{$L libNewton.so}
 
interface
 
implementation
 
end.
Erzeugt bereits den Fehler, was mir sagt, das es wohl irgendwelche Compilerswitches sein müssen die man wohl setzen ,mus, aber
{$linklib gcc}
{$linklib c}
gehen nicht, das waren die einzigen die Google noch ausgespuckt hat :(
--
Just try it

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von Targion »

Code: Alles auswählen

{$L libNewton.so}
Wozu brauchst du den? Ich glaube nicht, dass man die Bibliothek so einbinden darf.
Zuletzt geändert von Targion am Do 13. Aug 2009, 15:53, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 11103
Registriert: Mo 11. Sep 2006, 19:01

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von theo »

$L ist nicht für shared libraries
http://www.freepascal.org/docs-html/pro ... 60001.1.41" onclick="window.open(this.href);return false;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1676
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: Linker Fehler, beim Einbinden einer .so file

Beitrag von corpsman »

Juhee,

Ich habe es nun endlich geschafft.

1. Es gibt bereits Header für Newton.dll ver 2.0

diese sind hier

Allerdings sind diese sehr buggy und funktionieren nicht unter FPC, zumindest nicht wenn man nicht folgende änderungen vornimmt.

- die Windows units rauswerfen und durch geeignete Linux units ersetzen
- die Compilerswitches an geeigneter stelle anpassen

{$linklib stdc++}

- die libnewton.so mus umbenannt werden in "libNewton.so" und an einer geeigneten stelle gespeichert werden, bei mir wars
/usr/lib

Dann gings.
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Linker Fehler, beim Einbinden einer .so file

Beitrag von Socke »

corpsman hat geschrieben:- die libnewton.so mus umbenannt werden in "libNewton.so" und an einer geeigneten stelle gespeichert werden, bei mir wars
/usr/lib
Argh! Unter Linux entweder einen Symlink anlegen (ln -s name ziel) oder (noch viel besser) den Namen in der Pascal-Unit ändern. Wenn du die Bibliotheksdatei selbst umbenannt hast, kanns sein, dass irgendwann irgendetwas diese nicht mehr findet.

Wenn du das ganze portabel halten möchtest, könntest du mit Compiler-Switchs arbeiten (um bspw. den Namen je nach OS zu ändern). Beispiele gibts dazu zur genüge.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten