IDE-Tools - Keinerlei Funktiontion

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: IDE-Tools - Keinerlei Funktiontion

Beitrag von GPI »

Tja, leider hadhabt PureBasic die dylib nicht so wie unter Windows.

Dort ist es relativ einfach. Wenn ich eine DLL erzeuge, wird neben der DLL noch eine LIB erzeugt. Diese kann ich mittels PBCOMPILER-Commando /IMPORT dauerhaft automatisch verfügbar machen und wird bei bedarf gelinkt. Die DLL kann dann bei irgendeinen Programmpath liegen und gut ist. Die Befehle in der DLL sind dann in sämtlichen Modulen vorhanden.

Bei Mac gibts keine lib, nur eine dylib. Wenn ich die mit IMPORT einfüge, dann wird immer ein Pfad hinzugefügt. Die dylib *MUSS* dann immer dort stehen.... Es fehlt eine "Objectdatei", die die dynlib nachlädt und die man einfach dauerhaft verlinken kann. Dann wäre alles in Ordnung.

Was unter Windows wunderbar funktioniert, wird bei MacOs zur katastrophe....

ich muss mir wohl ein komplett neues Konzept ausdenken. Vorallen das dynamische "hinzufügen" wird interessant. Eigentlich mit der Art&Weise wie mein Compiler arbeitet nicht möglich... naja, mal später drüber schaun...
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
PeDre
Beiträge: 13
Registriert: 19.12.2014 11:22
Wohnort: Wien

Re: IDE-Tools - Keinerlei Funktiontion

Beitrag von PeDre »

Mit Xojo habe ich auf Bibliotheken mit dem Platzhalter @executable_path im Pfad zugreifen können. z.B.:

"@executable_path/../Frameworks/libusb-1.0.0.dylib"

Der Platzhalter @executable_path wird anscheinend vom Betriebssystem ersetzt.
Die *.dylib wurde beim Kompilieren per Script in das Verzeichnis Frameworks kopiert.

/*.app/Contents/MacOS/EXECUTABLE
/*.app/Contents/Frameworks/*.DYLIB

Vielleicht hilft dir das.
Peter
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: IDE-Tools - Keinerlei Funktiontion

Beitrag von GPI »

hmmm.... durchaus interessant.
Blöderweise braucht der Linker die dylib bereits beim erstellen der exe... ich werd damit mal rumspielen....

https://wincent.com/wiki/%40executable_ ... d_%40rpath
rpath könnte eine durchaus interessante Lösung werden. Damit könnte man wahrscheinlich angeben, das er die Dylib außerhalb und innerhalb der app sucht....
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: IDE-Tools - Keinerlei Funktiontion

Beitrag von mk-soft »

Kannst ja meinTool nehmen... MyAppData
Somit werden die Daten nach dem kompilieren, vor dem starten in die APP kopiert

P.S.
Ich glaube ich weiss was Du vor hast.

Statt mit DLL´s kann man auch vor dem kompilieren auch eigene Include-Dateien mit PB-Code erstellen und diese einbinden.
Somit braucht man keine DLL´s

Hatte ich vor langer Zeit mal gelöst ohne eine Zeilenverschiebung beim Debugger zu verursachen...

Link: PreCompiler http://www.purebasic.fr/german/viewtopi ... =9&t=30367
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: IDE-Tools - Keinerlei Funktiontion

Beitrag von GPI »

Das Problem ist komplizierter, die dylib muss schon bei der EXE-Erstellung an gewünschten Ort sein. Sie muss also schon beim erstellen der .app in der .app sein. Das geht mit den Tool vermutlich nicht. (habs nicht ausprobiert).

Ja sowas ähnliches plane ich tatsächlich, geht aber mittlerweile weit drüber hinaus.

Der Precompiler von mir arbeitet mit Macros. Die werden per RES-Files dauerhaft überall (also in allen Modulen) verfügbar gemacht. Die Macros sind so geschickt formuliert, das sie ohne Precompiler einen gültigen (aber sinnlosen) Programmcode erzeugen (gespickt mit end, damit dieser nicht versehentlich ausgeführt wird). Ich benötige das, um die Quelldatei erstmal durch den PBCompiler mit Flag "/PREPROCESS" zu jagen. Das hat zwei große Vorteile: Syntaxfehler werden durch den Compiler weiterhin erkannt und ich erhalte eine Datei, wo jede Zeile nur ein Befehl enthält. Also schön sauber aufgefädelt, alle Macros expandiert, CompilerIf-Endif aufgelöst. Schön zu verarbeiten.
Natürlich werden so meine Macros auch "Gekillt" und damit die Informationen, die der PreCompiler benötigt. Ich umgehe das ganze, indem ich die Informationen in Konstanten speichere. Genauer gesagt Konstanten, die mit #__PreCompilerCommand__ beginnen und werte dann den String dahinter aus.
Jetzt hab ich bspw. eine Klassendefinition und weis, das Interface und Structure ein Klasse definieren sollen. Ich möchte jetzt bspw. Declare-Zeilen für alle Methoden erzeugen, damit diese garantiert mit den Interface übereinstimmen. Einfügen kann ich aber so nicht. Aber ich kann in Temp-Ordner für jede Klasse eine Declarations-Datei erstellen, die alle Declares enthält (und mehr). Die Macros sind so gestalltet, das in "finalen" Durchgang ein XINCLUDEFILE mit den entsprechenden Dateinamen erzeugt wird. Ich muss so die Quelldateien nicht verändern (sehr vorteilhaft, wenn der Compiler einen Fehler findet. Die Fehlermeldungen passen immer).
Ob jetzt ein PreProcess oder final compiled wird, wird dadurch signalisiert, das die Datei von %COMPILERFILE einlese, vor der ersten Zeile (aber nicht mit Zeilenende abschließend) ein Modul _PRECOMPILER_ einfüge, das auch eine Konstante mit den Pfad der Declare-Dateien enthält und dann in Macro überprüfe, ob das da ist.

DAS klappt mittlerweile sehr gut und eigentlich fehlerfrei (ich finde zumindest keine).
Ich kann jetzt ohne irgendwelche XINCLUDES etc. ein DeclareClass und DefineClass benutzen.

Ich möchte aber jetzt "Librarys" ermöglichen. Includefiles, die automatisch bei Benutzung hinzugefügt werden. Ich wollte die erst in DLL/dylib auslagern, wie hier beschrieben: http://www.purebasic.fr/english/viewtop ... 12&t=69140
In Windows hat das super geklappt. Man muss natürlich dann bei der finalen EXE immer die DLL mitgeben (da ich die DLL in Compiler-Ordner kopiere, wurde sie bei Compile&run immer gefunden), aber es klappte exakt wie geplant.
Jetzt wollte ich das ganze für MAC anpassen - und da geht halt überhaupt nichts. Die dylib ist deutlich komplizierter und PB nicht richtig drauf vorbereitet und ich bin vermutlich auch zu blöd.

Mein neuer Ansatz: Ich hab einen Library-Quellcode. Der darf keine Module enthalten und die Befehle die "exportiert" werden sollen, müssen mit ProcedureDLL eingeleitet werden. Mein Precompiler jagd das ganze wieder durch den PREPROCESS, baut anhand der ProcedureDLL einen DeclareModule-Header auf, benennt ProcedureDLL wieder in DLL um und packt den restlichen Code der Lib in ein Module. Das speichert er sich in einen eigenen Verzeichnis. Der Modulname wird so gewählt, das er Compiler ihn findet - enthält bspw. den Compilertyp (bswp. MacOsXx64_LibGPI). Jetzt wird eine RES-File erstellt, wo alle exportieren Proceduren vorhanden sind. Ein Macro sieht dann bspw. so aus
Macro Befehl(para="") : MacOsXx645_LibGPI::_Befehl(para):EndMacro
(Man beachte den Unterstrich). Diese RES-File wird wieder in Compilerverzeichnis kopiert. Wenn man den Compiler jetzt neustartet, dann kennt er das Macro überall - in jeden Modul.
Mein PreCompiler macht jetzt leider eine Bruteforce-Attacke. Er erstellt ja oben den PREPROCESS. Wenn jetzt die Fehlermeldung fehlendes Module kommt, schaut er nach, ob er das Module in einer Include hat (Dateiname=modulename) und fügt sie an Anfang per Includefile hinzu und startet einen neuen PREPROCESS. Ist leider nicht schön, wenn man theoretisch 20 Libraries hat und alle nutzt, dann gibts auch 20 /PREPROCESS. Vorteil ist aber so, das nur das hinzugefügt wird, das tatsächlich gebraucht wird. Ich hoffe mal, da der Preprocess nur ein Syntax-Check durchführt, aber ansonsten nicht viel macht, dass das ganze trotzdem schnell geht.

Daran arbeite ich gerade. Und ich schreibe den Precompiler jetzt zum xten mal komplett um. Wenns fertig ist, sollte es auf MAC und WINDOWS wunderbar funktionieren. Ich hoffe, es wandelt dann noch wer für Linux um. Ich bereite ja zwangsweise durch MAC alles vor. Vermutlich muss man nicht mal was anpassen :)
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten