Program lässt sich mit libNewton.so nicht starten

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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:

Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

Guten Morgen allerseits,

Ich versuche mal wieder an meinem Balanced für Linux Weiter zu basteln.

Leider musste ich mal wieder Feststellen, dass ich es nicht mehr ausführen kann. Unter Ubuntu 10.10 gins noch. Jetzt unter 11.04 scheint es nicht mehr zu gehen.

Ich kann die Binary erstellen aber starten via IDE geht gar nicht. Da kommt dann nur "oops the debugger entered the error state .."

das Starten mittels Konsole gibt mir dann folgendes :

Code: Alles auswählen

corpsman@corpsman2:/sda5/sda5/Tools/Projects/Balanced$ ./Balanced 
./Balanced: symbol lookup error: /usr/lib/libNewton.so: undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE
corpsman@corpsman2:/sda5/sda5/Tools/Projects/Balanced$


Was mir sagt, dass etwas mit libNewton.so nicht stimmt. Ich hatte bisher ver. 2.11 drauf, aber auch ein Ubpdate auf 2.33 hat nichts gebracht :(

Könnt ihr mir weiter helfen ??

[edit]

Ein Versuch die .so file dynamisch zu laden scheitert bereits beim LoadLibrary

Code: Alles auswählen

Function LoadLib(Filename: String): Boolean;
Begin
  If FileExistsUTF8(filename) Then Begin
    result := True;
    lib := LoadLibrary(utf8tosys(Filename)); // <-- Die Datei Existiert, aber lib bleibt 0
    If lib = 0 Then
      result := false;
  End
  Else
    result := false;
End;
--
Just try it

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Program lässt sich mit libNewton.so nicht starten

Beitrag von carli »

Also ich bin hier unter 11.04 und lade die libNewton.so nicht dynamisch im Code, sondern via external-Klauseln. Die Lib finde ich per LD_LIBRARY_PATH. Bei mir geht alles.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

Das Dynamische laden war nur um zu testen ob ich die libNewton.so überhaupt laden kann.

Mittlerweile hab ich es geschaft die libNewton.so selbst neu mit dem g++ compilieren zu lassen.

Das dynamische Laden gibt mir so ein Handle zurück.

Ich binde libNewton.so eigentlich mit "NewtonImport.pas" ein und die nutzt auch die External Klauseln.

Mein eigentliches Projekt lässt sich nun bauen, und auch starten. Doch sobald ich auf die Lib zugreife stürzt alles ab.

Evlt. liegt es daran dass ich den Compilerswitsch :

Code: Alles auswählen

{$linklib stdc++}


entfernen musste um den Linker Fehler raus zu bekommen. Hier der Linker Fehler mit Flag :

Code: Alles auswählen

/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lstdc++
Balanced.lpr(24,1) Error: Error while linking
Balanced.lpr(24,1) Fatal: There were 1 errors compiling module, stopping


Wäre es möglich das du mir ein paar Codeschnipsel oder noch besser ne Mini Demo geben kannst in der die libNewton.so bei dir eingebunden wird ?
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von Socke »

corpsman hat geschrieben:

Code: Alles auswählen

{$linklib stdc++}


entfernen musste um den Linker Fehler raus zu bekommen. Hier der Linker Fehler mit Flag :

Code: Alles auswählen

/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lstdc++
Balanced.lpr(24,1) Error: Error while linking
Balanced.lpr(24,1) Fatal: There were 1 errors compiling module, stopping

Dir ist schon klar, was dieser Compiler-Schalter bewirkt?
Die Aussage »Das kann nicht an der Bibliothek liegen, die ist nämlich gar nicht da« funktioniert nicht wirklich. Deine Bibliothek (der statisch gelinkte Teil) benötigt die (ebenfalls teilweise statisch gelinkte) Standard C++ Bibliothek (stdc++). Die findest du im Paket libstdc++6-4.4-dev (bzw. andere Version unter Ubuntu) — wenn das nicht installiert ist, bitte nachholen.

Sollte dies dein Problem nicht lösen, kann das zwei Ursachen haben:
  1. Der FPC findet den Pfad nicht (kann in Lazarus eingegeben werden)
  2. Die Datei ist falsch benannt (liegt unter »/usr/lib/gcc/i486-linux-gnu/4.4/libstdc++.a«; gegebenenfalls musst du einen Symlink anlegen
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

Also ich bin ein Stückchen weiter...

Die Lib ist bei mir installiert, ich habe mir mittlerweile einen Dynamischen Loader für die .so geschrieben ( war sehr viel Arbeit und ist lang nicht vollständig ) und das Game geht nun wieder *freu*

=> Meine Compilierte libNewton.so ( übrigens ist sie ver. 2.31 wie ich nun auslesen konnte ) funktioniert.

Lieber ist mir natürlich die Variante mit der Statisch Gelinkten Original Version.

zu deinem
1. den Schalter -FL hab ich gefunden der ist Leer
2. in meinem gcc Verzeichnis gibt es nur das Unterverzeichnis avr

Eine Suche nach "libstdc++" ergab dieses Verzeichnis

/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/

ich habe es in die fpc.cfg eingetragen, aber der Fehler bleibt leider :( ( Noch viel schlimmer es ging alles Kaputt )

Also hab ich FPC und FPC-Source neu installiert.

Dann habe ich den Pfad bei -Fl in den Projekt Optionen eingetragen

und nun scheint es zu gehen. Es bleiben natürlich noch weitere Tests aus, aber die Anwendung lies sich starten und die libNewton.so wurde aufgerufen und das Spiel scheint wieder zu laufen.

Thx auf jeden für die Hilfe und Geduld
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Program lässt sich mit libNewton.so nicht starten

Beitrag von MAC »

Wo ihr bei dem Thema Newton sein, kennt ihr ein gutes Tutorial um die Newton Engine mit Lazarus zu benutzen ?
Ich hab mir das schonmal angeschaut und gerade nachdem die Open Source geworden ist ist sie wahrscheinlich nocht interessanter, aber ich hab immer nur c++ beispiele gefunden...

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Program lässt sich mit libNewton.so nicht starten

Beitrag von carli »

@Topic:
Die Header von Stukuc sind ein bisschen fehlerhaft, ich nutze eine eigene Version (das array of handelt fpc etwas anders und er nutzt auch manchmal Doppelpointer, wenn es um Prozedurvariablen geht)
https://bitbucket.org/carli/toastengine ... import.pas

Die stdc++ bekommt man so rein:
https://bitbucket.org/carli/toastengine ... newton.inc

Code: Alles auswählen

{$link 'libstdc++.so.6'}


MAC hat geschrieben:Wo ihr bei dem Thema Newton sein, kennt ihr ein gutes Tutorial um die Newton Engine mit Lazarus zu benutzen ?
Ich hab mir das schonmal angeschaut und gerade nachdem die Open Source geworden ist ist sie wahrscheinlich nocht interessanter, aber ich hab immer nur c++ beispiele gefunden...

Na und? Dann lässt du eben das "f" bei "1.0f" weg und schon hast du Pascal.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

Hmm, deine Version bringt mir ne Warnung wenn ich aber schreibe :

Code: Alles auswählen

{$linklib 'libstdc++.so'}


Dann kommt die Warnung nicht, funktionieren tuts beide mal..

Die Von dir Verlinkte NewtonImport.pas ist ver. 2.00, die die ich im SDK runter geladen habe ist angeblich 2.33 meine Anwendung hat mit beiden die selben "Fehler"..
Wenn ich mir die beiden NewtonImports mit "kompare" ansehe, sieht es auch danach aus, als dass meine 2.33 mehr Routinen hat. Über die Qualität der Implementierung sagt das natürlich nichts aus ..
--
Just try it

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Program lässt sich mit libNewton.so nicht starten

Beitrag von carli »

Neuere Versionsnummer ist besser. Julio fixt da ab und zu ne Menge Bugs.
Klappts also?

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

Jein,

ja ich kann das Game starten und auch diverse Levels laden. Mit Version 2.11 konnte ich aber alle Levels laden. Mit der neuen 2.31 bekomme ich bei einigen Levels einen Fehler in :

Code: Alles auswählen

void dgBody::InvalidateCache ()
{
   m_sleeping = false;
//   m_isInWorld = true;
   m_equilibrium = false;
   m_genericLRUMark = 0;
   m_sleepingCounter = 0;
   m_prevExternalForce = dgVector (dgFloat32 (0.0f), dgFloat32 (0.0f), dgFloat32 (0.0f), dgFloat32 (0.0f));
   m_prevExternalTorque = dgVector (dgFloat32 (0.0f), dgFloat32 (0.0f), dgFloat32 (0.0f), dgFloat32 (0.0f));
 
   dgMatrix matrix (m_matrix);
   SetMatrixOriginAndRotation(matrix);
}


Das Coole daran das Newton nun OpenSource ist, ich kann direkt sehen wohs kracht ;).

Nun beginnt die Fehlersuche, mal Schaun worans dann letztendes lag.

Eine andere echt tolle Sache, mein Game lässt sich nun unter Windows wie Linux Starten, und verhällt sich auch gleich (thema Fehler) einziger unterschied bei der Windows version dauert es ewig bis der Renderingkontext erzeugt ist, aber das ist mir als Linux User "Fast" egal:)
--
Just try it

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Program lässt sich mit libNewton.so nicht starten

Beitrag von carli »

corpsman hat geschrieben:Eine andere echt tolle Sache, mein Game lässt sich nun unter Windows wie Linux Starten, und verhällt sich auch gleich (thema Fehler) einziger unterschied bei der Windows version dauert es ewig bis der Renderingkontext erzeugt ist, aber das ist mir als Linux User "Fast" egal:)


Um mal die Seite hier zu zitieren: http://www.newtondynamics.com/forum/downloads.php
The performance gains are as follow fo rtshi eversion are
PC 30% faster in 32 bit mode when using x87 mode (SSE is marginally faster)
Mac 200% faster than any other previous version of Newton on Intel Mac.
Linux 200% faster in all versions (32 and 64 bit).
Linux for some inexplicable reason had become the fastest version of Newton ever.
Twice as fast the windows and a bit faster than the Mac, although I cannot verify this since my PC run at a faster speed than my Mac Pro.
My guess is that they both are the same speed since they are build with GCC 4.3.1 with the same compiling options.
For the Iphone I do not know but I am usin teh same GCC flags, so maybe we also getting a 3 fold speed up (yea like that is going to happen, but it will be nice)
Mac_SDK_2.08
Windows_SDK_2.08
Linux32_SDK_2.08
Linux64_SDK_2.08

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: Program lässt sich mit libNewton.so nicht starten

Beitrag von corpsman »

einziger unterschied bei der Windows version dauert es ewig bis der Renderingkontext erzeugt ist,


ich meinte nicht Newton, sondern rein OpenGL.

Bei Newton an sich mekre ich keinen unterschied, da es schneller wir 60 PFS läuft und meine Anwendung dann die Bremse zieht ...
--
Just try it

Antworten