Kompilieren und Linken über Kommandozeile

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
roc_p2
Beiträge: 3
Registriert: 23.04.2016 23:56

Kompilieren und Linken über Kommandozeile

Beitrag von roc_p2 »

Durch Angabe der Option "-c" mit dem pbcompiler wird eine Assembler-Datei (.asm) erstellt. Ich habe nun erfolglos versucht, ausgehend von dieser Datei in OSX (64bit) eine ausführbare Datei mit dem Assembler (yasm) und Linker (ld) von der Kommandozeile zu erstellen. Zwar kann lässt sich die Assembler-Datei mit yasm fehlerlos Kompilieren, den erhaltenen Objektcode konnte ich aber bisher mit ld nicht linken. Ich vermute, man müsste diesen mit den richtigen Libraries linken, bin aber aus den vorhandenen Dateien im Ordner "purelibraries" nicht schlau geworden. Bin um jeden Hinweis mit einfachem Beispiel zur Benutzung von "pbcompiler -c", "yasm" und "ld" froh, danke im Voraus.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von edel »

Ich weiss nicht genau wie es unter MAC OS ist, aber unter Windows und Linux beinhalten die Dateien im purelibraries Ordner die eigentliche statische Bibliothek. In der Datei stehen, neben den benoetigten Libs, die Information welche Funktionen es in der Lib gibt, die Hilfedatei usw, danach kommt die statische Lib (vor laengerer Zeit mit Xor verschluesselt).

Der Kompiler von Purebasic entpackt die statische Lib beim kompilieren in ein temporaeres Verzeichnis und von dort aus werden sie gelinkt. Wenn du also in diesen Prozess eingreifst, kannst du sie dir heraus kopieren, bevor Purebasic sie wieder loescht. Unter Windows wuerde man z.B. einfach die Fasm.exe durch ein Programm ersetzen, das nur eine MessageBox anzeigt und somit das kompilieren pausiert. Damit hast du die Moeglichkeit die Libs zu kopieren.

Wenn du allerdings nur etwas am ASM Code aendern moechtest, gibt es einen Schalter (reasm) fuer den Purebasic Kompiler, der den Code wieder kompilieren kann.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von Sicro »

edel hat geschrieben:Wenn du allerdings nur etwas am ASM Code aendern moechtest, gibt es einen Schalter (reasm) fuer den Purebasic Kompiler, der den Code wieder kompilieren kann.
Den gibt es nur bei der Windows-Version.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
roc_p2
Beiträge: 3
Registriert: 23.04.2016 23:56

Re: Kompilieren und Linken über Kommandozeile

Beitrag von roc_p2 »

Danke, ich hatte mir inzwischen mit der Aktivitätsanzeige auf den pbcompiler alle Lese-/Schreibzugriffe für den gesamten Vorgang anzeigen lassen, und diese bestätigen deine Anmerkungen.

Danke auch für den Tipp, wie ich den Vorgang allenfalls pausieren kann. Ich probiere sicher auch noch zusätzlich, ob sich die statischen Bibliotheken alle sonstwie entpacken lassen (im compiler Ordner sehe ich Programme wie pblibrarymaker und pbsoimporter, diese tönen erfolgsversprechend).

Betreffend den reasm Schalter hatte ich gemäss Programmhilfe verstanden, dass es diesen nur für die Windows Version gibt (ist unter "Windows spezifische Kommandozeilen-Parameter" aufgelistet); probieren kann ich es aber trotzdem.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von edel »

Du kannst sie auch direkt entpacken :

(64 bit)

Code: Alles auswählen

Procedure UnPackPBLib(*buffer.long,*size.long) 
	Protected magic.l = $C3500 
	Protected ende.l 
	Protected start.l   
 
	*buffer  + PeekL(*buffer+4) + 12	 
	size     = PeekL(*buffer+4)	 
	*buffer  + 12 
	 start.l = *buffer		 
	 ende.l  = *buffer + size 
	  
	While *buffer <= ende 
		*buffer\l =~ *buffer\l 
		*buffer\l - magic 
		magic + size		 
		*buffer + 4 
	Wend  
	 
	*size\l = size 
	ProcedureReturn start 
EndProcedure 

#PB_LIB = "purelibraries\gadget"

file = ReadFile(-1,"purelibraries\" + #PB_LIB) 
 
If file 
	 
	size 	= Lof(file) 	 
	buffer = AllocateMemory(size) 
	If ReadData(file,buffer,size) 
		CloseFile(file) 
		lib = UnPackPBLib(buffer,@size) 
		file = CreateFile(-1,"desktop/" + #PB_LIB + ".a") 
		If file  
			WriteData(file,lib,size) 
			CloseFile(file) 
		EndIf  
		FreeMemory(buffer) 
	EndIf  
	 
EndIf 
roc_p2
Beiträge: 3
Registriert: 23.04.2016 23:56

Re: Kompilieren und Linken über Kommandozeile

Beitrag von roc_p2 »

Herzlichen Dank!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von NicTheQuick »

Bleibt die Frage, ob man das laut Lizenz darf. Vielleicht vorher nochmal durchlesen?
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von edel »

Dafuer muesste man erst einmal wissen wo man lesen sollte 8)
Hast du ein Link?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Kompilieren und Linken über Kommandozeile

Beitrag von NicTheQuick »

In der Hilfe gibt es den Punkt "Rechtliches". Da steht aber nicht wirklich viel. Ich vermute eine richtige Lizenz fehlt hier schlicht. Keine Ahnung, wie das dann einzuordnen ist.
Bild
Antworten