Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c++ (https://www.delphipraxis.net/138535-newton-2-0-lazarus-und-ubuntu-header-uebersetzung-von-c.html)

Corpsman 12. Aug 2009 09:21


newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c++
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen,

Ich habe mir ein Linux zugelegt, und möchte mit Lazarus nun "fast" genau das selbe können was ich mit Delphi schon hinbekommen hatte.

Erstaunlicherweise ist hierbei auch sehr viel machbar gewesen.

Doch nun bin ich an eine für mich "unüberwindbare" Grenze gestoßen und brauche eure Hilfe.

Ich versuche die Newton.dll unter Linux zum laufen zu bringen.

Doch leider gibt es da ein Problem. Die NewtonImport.pas unterstützt zwar Linux und FPC auch, allerdings kann man nirgens eine passende *.so Datei runterladen.

Die libNewton.so die es gibt ist schon Newton 2.0 und da Sascha wohl einschneidende änderungen von 1.53 nach 2.0 vorgenommen hat. Ist die NewtonImport.pas unbrauchbar...

Nun habe ich in einschlägigen Forem nachgefragt, und anscheinend hat noch niemad eine neue NewtonImport.pas geschrieben.

Die entsprechende Newton.h sowie die libNewton.so gibt es Hier

Also ist mein Plan nun die NewtonImport.pas selbst zu erstellen. Mein Hauptproblem hierbei ist natürlich das ich kein C, bzw C++ kann.

Daher suche ich hier nun jemanden der den Anfang macht. Sprich eine "Grundversion" in der auch nicht weiter viel funktionieren mus, auser eben das mein Lazarus es kompiliert, und ich dann sehen kann wie ich den Rest übersetzen mus.

So wie ich mir das vorstelle ist das Übersetzen, nicht weiters schwer wenn man einmal Anhand z.b. der procedure

Delphi-Quellcode:
// NEWTON_API void NewtonDestroy (const NewtonWorld* newtonWorld);
Procedure NewtonDestroy(const newtonWorld:PNewtonWorld);
eine Übersetzung gesehen hat, dann müste man alle anderen sachen analog übersetzen können.

Das Problem stellt natürlich das "Newton_API" dar, das ich da oben nun noch nicht übersetzt habe. Und klar ist das da ja auch noch fehlt wie die libary eingebunden werden mus.

Ich weis zwar das ein c "struct" irgendwas wie ein Record in Pascal ist, aber wie's genau geht weis ich auch nicht ..

Wenn da drausen also irgend ein Netter Mensch ist, der mir diesen "Anfang" macht, dann könnte ich den Rest schon übernehmen, und die Delphi Community könnte Newton2.0 auch nutzen.

Zum Ansehn habe ich euch mal den Header mit Hochgeladen..

JamesTKirk 12. Aug 2009 12:27

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
Hi!

Ich weiß jetzt zwar nicht inwieweit die Newton Header C++ statt C sind, aber du kannst ja einfach mal das Tool h2pas, das bei FPC bereits dabei ist, ausprobieren. Rufst du es ohne Parameter auf, werden dir alle verfügbaren Parameter angezeigt. Sehr nützlich sind "Kommentare entfernen" (-S), "PIrgendwas statt ^Irgendwas" (-p), "weniger Leerzeilen" (-c) und "verwende 'external libname name 'func_name''" (-D zusammen mit "-l libnewton.so").

Am besten einfach mal ausprobieren, was dann rauskommt. Im Normalfall heißt die Datei dann "newton.pas", wenn der Header "newton.h" heißt. Sollte ein Fehler auftauchen, kannst du ja einfach ein paar Codestellen auskommentieren und nochmal probieren. Wenn zu viel C++ drin ist, dann hilft das aber auch nichts... :(

Gruß,
Sven

Corpsman 12. Aug 2009 17:25

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
ich will dich ja nicht enttäuschen, aber auf meinem system gibts keine Anwendung die sich h2pas schimpft, nicht mal mit aptitude bekomme ich das installiert ...

Corpsman 12. Aug 2009 20:07

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
Also ich hab nun rausgefunden wie man das h2pas aufs system bekommt.

Leider klappts nicht ganz er bringt nen Syntax fehler bei teilen wie :

Zitat:

typedef struct NewtonMesh{} NewtonMesh;
und
Zitat:

struct NewtonConvexHullParam
{
int m_vertexCount;
int m_vertexStrideInBytes;
int m_faceCount;
dFloat* m_vertex;
};

TurboMartin 12. Aug 2009 20:43

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
Delphi-Quellcode:
type
  TNewtonMesh = record
  end;
  PNewtonMesh = ^TNewtonMesh;
  PPNewtonMesh = ^PNewtonMesh;
Delphi-Quellcode:
type
  TdFloat = double; //bzw. float
  PdFloat = ^TdFloat;

  TNewtonConvexHullParam = record
    m_vertexCount: Integer;
    m_vertexStrideInBytes: Integer;
    m_faceCount: Integer;
    m_vertex: PdFloat;
  end;

Corpsman 13. Aug 2009 08:41

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
Liste der Anhänge anzeigen (Anzahl: 2)
Also, das Tool funktioniert so nicht.

Es übersetzt, zwar die ganzen Basistypen, aber sobald es an die "External" proceduren geht, schreibt es nur noch "Error".

Also habe ich mal versucht das von Hand zu machen. In Anlehnung an die alte version hab ich die Unit wieder

NewtonImport.pas

genannt.

Ich habe mich auf das Wesentliche Beschränkt und mal versucht nur eine Einzige Funktion "NewtonCreate" rein zu machen, wenn diese
eine Geht , dann kann ich den Rest ja Analog übernehmen, dachte ich mir.

Compilieren tut ers nun aber leider nur bedingt...

Der Compiler bewirft mich mit :

Zitat:

./libNewton.so: undefined reference to `__cxa_guard_abort'
./libNewton.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
./libNewton.so: undefined reference to `vtable for __cxxabiv1::__class_type_info'
./libNewton.so: undefined reference to `__cxa_pure_virtual'
./libNewton.so: undefined reference to `operator delete(void*)'
./libNewton.so: undefined reference to `__cxa_guard_acquire'
./libNewton.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
./libNewton.so: undefined reference to `__cxa_guard_release'
./libNewton.so: undefined reference to `__gxx_personality_v0'
project1.lpr(20,1) Error: Error while linking
project1.lpr(20,1) Fatal: There were 1 errors compiling module, stopping
nicht das ich irgendwie verstehen würde was das nun bedeutet, kann mir das einer von euch sagen ?

Corpsman 13. Aug 2009 16:33

Re: newton 2.0 Lazarus und Ubuntu, Header Übersetzung von c+
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz