Wie wird (X)IncludeFile in der Exe umgesetzt
Wie wird (X)IncludeFile in der Exe umgesetzt
Hallo,
bei der Portierung einiger Programme auf PB würde ich gerne auf (X)IncludeFile zurückgreifen, um Teile des Quellcodes, die in mehreren aber nicht unbedingt allen Programmen genutzt werden, in Libraries zu sammeln, z.B.:
-Library 1 mit diversen Funktionen: 200KB Sourcecode
-Library 2 mit diversen Funktionen: andere 200KB Sourcecode
-Programm 1 mit 100KB Sourcecode und benötigt ca. 50KB aus der Library 1 und 100KB aus der Library 2
-Programm 2 mit 100KB Sourcecode und benötigt ca. 150 KB aus der Library 1 und nur 50 KB aus der Library 2
-Weitere Programme, die auch nur Teile aus den Librarys 1 und 2 benötigen
Landet nur das in der .exe, was auch wirklich gebraucht wird, oder werden immer alle Prozeduren/Funktionen aus den Librarys mitkompiliert, die das einzelne Programm unter Umständen gar nicht alle braucht?
Danke und Gruß,
Hoerbie
bei der Portierung einiger Programme auf PB würde ich gerne auf (X)IncludeFile zurückgreifen, um Teile des Quellcodes, die in mehreren aber nicht unbedingt allen Programmen genutzt werden, in Libraries zu sammeln, z.B.:
-Library 1 mit diversen Funktionen: 200KB Sourcecode
-Library 2 mit diversen Funktionen: andere 200KB Sourcecode
-Programm 1 mit 100KB Sourcecode und benötigt ca. 50KB aus der Library 1 und 100KB aus der Library 2
-Programm 2 mit 100KB Sourcecode und benötigt ca. 150 KB aus der Library 1 und nur 50 KB aus der Library 2
-Weitere Programme, die auch nur Teile aus den Librarys 1 und 2 benötigen
Landet nur das in der .exe, was auch wirklich gebraucht wird, oder werden immer alle Prozeduren/Funktionen aus den Librarys mitkompiliert, die das einzelne Programm unter Umständen gar nicht alle braucht?
Danke und Gruß,
Hoerbie
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Es landet fast alles in der Exe. In seltenen Fällen, wo eine Procedure keinerlei Abhängigkeiten zuhoerbie hat geschrieben:Landet nur das in der .exe, was auch wirklich gebraucht wird,
anderen Proceduren hat, wird diese nicht mitkompiliert. Abhängigkeiten zwischen ungenutzen
Proceduren reichen, damit diese in der Exe landen!
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Der Compiler von PureBasic erkennt automatisch, wenn bestimmte Procedures nicht aufgerufen werden und kompiliert sie deshalb nicht mit.
Aaaaaaaber:
Meines Wissens nach wird hier 'func1()' in die EXE-Datei mit einkompiliert, weil sie nun mal an einer Stelle - nämlich in 'func2()' - aufgerufen wird. Da aber 'func2()' nirgendwo aufgerufen wird, bräuchte man 'func1()' auch nicht mitkompilieren. Es wird trotzdem getan.
Edit:
ts-soft hat mich gerade darin bestätigt.
Aaaaaaaber:
Code: Alles auswählen
Procedure func1()
;Ich werde nur von func2 benutzt
EndProcedure
Procedure func2()
;Ich nutze zwar func1, aber werde selbst nie aufgerufen
func1()
EndProcedure
Edit:
ts-soft hat mich gerade darin bestätigt.
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Habe ein Tool gemacht um Prozeduren zu entfernen, die PB noch drin lässt, obwohl nicht benötigt:
- DeadProcedureRemover_IDE.zip
Der Thread im englischen Forum wo das entwickelt wurde:
- Code optimization
Den Source gibts hier:
- DeadProcedureRemover_IDE_SRC.zip
- DeadProcedureRemover_IDE.zip
Der Thread im englischen Forum wo das entwickelt wurde:
- Code optimization
Den Source gibts hier:
- DeadProcedureRemover_IDE_SRC.zip
Code: Alles auswählen
Found 1047 procedure macros.
Removed 396 out of 1010 used procedure macros.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Habt vielen Dank für die ausführliche Auskunft. Es ging mir in erster Linie nur um nicht ineinander verschachtelte Prozeduren/Funktionen, wenn die rausfallen im Compilat, reicht mir das, um nicht zuviele verschiedene Libs bauen zu müssen.
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Habt ihr ein Beispiel-Code mit dem man dieses Verhalten nachprüfen kann?
Mit meinem kleinem Test-Code erhalte ich unter Linux zwei in der Größe identische Dateien:
Die Testdateien habe ich mit Unicode-Unterstützung kompliert.
Mit meinem kleinem Test-Code erhalte ich unter Linux zwei in der Größe identische Dateien:
Code: Alles auswählen
Procedure.s Test()
Protected a.s = "##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################" +
"##########################################################"
ProcedureReturn a
EndProcedure
Test() ; beim zweitem Kompilieren auskommentieren
Code: Alles auswählen
wc -c mit_test ohne_test
15784 mit_test
15784 ohne_test

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
-
- Beiträge: 213
- Registriert: 13.07.2008 10:05
- Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Auf Windows funktioniert dein Testcode ohne Probleme ich habe 6.656 Bytes mit dem Test() Aufruf und 5.120 Bytes ohne.
Sollte auf Linux eigentlich ähnlich aussehen bist du sicher, dass du dich nicht irgendwo vertan hast?
Sollte auf Linux eigentlich ähnlich aussehen bist du sicher, dass du dich nicht irgendwo vertan hast?
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Bei mir haben auch beide Dateien '15784' Bytes.
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Ich habe es mehrmals überprüft.Christian+ hat geschrieben:Sollte auf Linux eigentlich ähnlich aussehen bist du sicher, dass du dich nicht irgendwo vertan hast?
Christian+ hat geschrieben:Auf Windows funktioniert dein Testcode ohne Probleme ich habe 6.656 Bytes mit dem Test() Aufruf und 5.120 Bytes ohne.
Dann funktioniert das automatische entfernen von unbenutzten Procedures anscheinend nur unter Windows.NicTheQuick hat geschrieben:Bei mir haben auch beide Dateien '15784' Bytes.

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
Re: Wie wird (X)IncludeFile in der Exe umgesetzt
Hallo,
kann das noch jemand auf dem Mac mal ausprobieren?
Ein Grund, warum ich auf PB umsteige, ist die Multiplattform-Unterstützung. Wobei mich nach Windows an sich Linux mehr interessiert als Mac-OS.
Danke und Gruß, Hoerbie
kann das noch jemand auf dem Mac mal ausprobieren?
Ein Grund, warum ich auf PB umsteige, ist die Multiplattform-Unterstützung. Wobei mich nach Windows an sich Linux mehr interessiert als Mac-OS.
Danke und Gruß, Hoerbie