[Executable] Gpick Wie??

WoodstockimWeb

Danke für den Fisch
Registriert
12 Juli 2013
Beiträge
1.802
Ort
Münsterland
Hoi Bande,

ich gebe es zu, ich bin zu Blöd.

Ich habe eine Software gefunden, , mit der ich was anfangen könnte.

Leider bekomme ich die nicht installiert geschweige denn mit meiner installierten Python Version gestartet.

Wie baue ich da ne normale .exe raus, damit das Starten durch einen Doppelklick erfolgen kann??

Gruß
Woodstock
 
Das ist kein Python-Programm, sondern C++. Um das zu bauen brauchst du einen CMake, einen C++-Compiler, und eine ganze Menge Libraries - siehe
Unter Windows leider nicht wirklich trivial...

Falls dir die aeltere Version 0.2.5 reicht, habe ich das gefunden (aber nicht getestet):
Das stammt wohl von einer aelteren Version der gpick-Site.
 
  • Thread Starter Thread Starter
  • #4
Also die Software ist streng komisch, ich hab jetzt gestern bestimmt 4 Stunden versucht das korrekt, unter MSYS2 unter Windows 10, zu kompilieren.

Es geht auch zum Teil mit Scons3 (drei!), bricht jedoch wegen einer Anweisung in Boost-Library ab, obwohl der Prozess recht weit durchläuft und nicht mehr viel fehlt. Und das "Basis" Scons ohne Version 3.1.0 bricht ab weil Boost nicht gefunden wird obwohl es eigentlich im PATH liegen sollte? Alles merkwürdig.

Und "cmake" scheitert bei mir weil ich nicht wusste wie man den C und CXX Compiler korrekt deklariert obwohl mit [kw]-DCMAKE_C_COMPILER=gcc[/kw] korrekt(?) übergeben.

Unterm Strich, keine Ergebnisse aber viele Nerven und Zeit investiert. :o

Schade eigentlich, unter Linux (Debian) kompiliert es mit cmake innerhalb von einer Minute. Unter MSYS2 liegt da etwas im argen was ich nicht aufgrund fehlender CMAKE Kenntnisse hätte beheben können.

Interessant ist aber, man kann Boost soweit "monkeypatchen" das der erste Fehler verschwindet und dann liegt noch ein einziger "Fehler" mittels [kw]::readlink[/kw] in einer Linux Direktive das "Readlink" nicht gefunden wird. Also ich weiß nicht genau wo der Fehler genau herrührt, wäre aber an einer Lösung auch interessiert!
 
Interessant ist aber, man kann Boost soweit "monkeypatchen" das der erste Fehler verschwindet und dann liegt noch ein einziger "Fehler" mittels [kw]::readlink[/kw] in einer Linux Direktive das "Readlink" nicht gefunden wird. Also ich weiß nicht genau wo der Fehler genau herrührt, wäre aber an einer Lösung auch interessiert!
Da hast du aber komische Makros definiert.
Gemaess dem Code in sollte der readlink-Call eigentlich nur benutzt werden wenn BOOST_OS_LINUX gesetzt ist.
Eventuell kannst du ja mal versuchen, das "Quick & Dirty" so hinzupatchen, dass nur noch der #else-Block uebrig bleibt ...


Edit: Bei nochmaligem Lesen faellt mir auf, dass da jemand versucht hat, BOOST_OS_LINUX statt mit #if mit #ifdef zu ueberpruefen. Das geht daneben. Die Dokumentation weist auch darauf hin, die Makros sind immer definiert, aber evaluieren halt zu false:
Ein schoen subtiler Bug.
 
Zuletzt bearbeitet:
Ja genau da sitzt der Codepart der den Fehler wirft. Ich bin mir aber auch nicht wirklich sicher ob das ganze CMake auch für Windows oder Linux kompiliert. Laut Angabe wäre Linux das Build-Target. Aber CMake ist echt... undurchsichtig um es freundlich zu formulieren. :)

Heute gab es eine neue Gpick Version für Debian, die den gesamten Scons Build Prozess entfernt laut Changelog, habe aber aktuell noch nicht geschaut wie das im Repo aussieht.

Edit:
Als Ergänzung, die Direktiven verlangt cmake bei mir, weil es die Compiler der MSYS Installation nicht selbstständig erkennt. Daher die Frage wie und ob das richtig gesetzt ist. [kw]which gcc[/kw] und [kw]which g++[/kw] zeigen die Compiler in der korrekten Version an. Nur das Cmake frisst es nicht :D
 
Zuletzt bearbeitet:
Versuch doch mal, in source/Paths.cpp, Zeile 32
[src=cpp]#ifdef BOOST_OS_LINUX[/src]
zu
[src=cpp]#if BOOST_OS_LINUX[/src]
zu patchen. Dann duerfte der Guard wie gedacht funktionieren (sofern die Makros sonst richtig gesetzt sind natuerlich).

Falls es damit funktionniert - bitte einen PR machen, wir wollen ja alle freie Software verbessern :D
 
Ja, das funktioniert, allerdings scheitert der finale Schritt daran, das pkg-config "boost-filesystem" und "boost-system" nicht findet. Hab schon mittels "pkg-config --list-all" alles durchsucht und "boost" taucht dabei nicht zum linken auf.
 
Hast du denn die entsprechenden DLLs auf dem System und in LD_LIBRARY_PATH? Die Header muessen ja da sein, sonst haettest du schon beim Kompilieren Fehler.

Welche Argumente werden dem Linker uebergeben?
Du kannst die ausgefuehrten Commands per "make VERBOSE=1" anzeigen lassen.
 
Folgendes wird dem Linker übergeben:

[src=cpp]g++ -o build/gpick.exe -Wl,-no-undefined -Wl,-as-needed -s -pthread -Wl,-luuid build/source/version/Version.o build/source/gtk/ColorCell.o build/source/gtk/ColorComponent.o build/source/gtk/ColorWheel.o build/source/gtk/ColorWidget.o build/source/gtk/LayoutPreview.o build/source/gtk/Range2D.o build/source/gtk/Shapes.o build/source/gtk/Swatch.o build/source/gtk/Zoomed.o build/source/layout/Box.o build/source/layout/Context.o build/source/layout/Layout.o build/source/layout/Layouts.o build/source/layout/ReferenceCounter.o build/source/layout/Style.o build/source/layout/System.o build/source/i18n/I18N.o build/source/dbus/DbusInterface.o build/source/dbus/Control.o build/source/tools/ColorSpaceSampler.o build/source/tools/PaletteFromImage.o build/source/tools/TextParser.o build/source/lua/Callbacks.o build/source/lua/Color.o build/source/lua/ColorObject.o build/source/lua/DynvSystem.o build/source/lua/Extensions.o build/source/lua/GlobalState.o build/source/lua/I18N.o build/source/lua/Layout.o build/source/lua/Ref.o build/source/lua/Script.o build/source/color_names/ColorNames.o build/source/parser/TextFile.o build/source/parser/TextFileParser.o build/source/dynv/Binary.o build/source/dynv/Map.o build/source/dynv/Types.o build/source/dynv/Variable.o build/source/dynv/Xml.o build/source/common/Format.o build/source/AutoSave.o build/source/BlendColors.o build/source/BrightnessDarkness.o build/source/Clipboard.o build/source/ClosestColors.o build/source/Color.o build/source/ColorList.o build/source/ColorMixer.o build/source/ColorObject.o build/source/ColorPicker.o build/source/ColorRYB.o build/source/ColorSource.o build/source/ColorSourceManager.o build/source/ColorSpaceType.o build/source/ColorWheelType.o build/source/Converter.o build/source/Converters.o build/source/ErrorCode.o build/source/FileFormat.o build/source/FloatingPicker.o build/source/GenerateScheme.o build/source/GlobalState.o build/source/HtmlUtils.o build/source/ImportExport.o build/source/LayoutPreview.o build/source/Noise.o build/source/Paths.o build/source/Random.o build/source/RegisterSources.o build/source/Sampler.o build/source/ScreenReader.o build/source/StandardDragDropHandler.o build/source/StandardEventHandler.o build/source/StandardMenu.o build/source/StringUtils.o build/source/ToolColorNaming.o build/source/Variations.o build/source/main.o build/source/uiAbout.o build/source/uiApp.o build/source/uiColorDictionaries.o build/source/uiColorInput.o build/source/uiConverter.o build/source/uiDialogAutonumber.o build/source/uiDialogGenerate.o build/source/uiDialogMix.o build/source/uiDialogOptions.o build/source/uiDialogSort.o build/source/uiDialogVariations.o build/source/uiImportExport.o build/source/uiListPalette.o build/source/uiStatusIcon.o build/source/uiTransformations.o build/source/uiUtilities.o build/source/transformation/Chain.o build/source/transformation/ColorVisionDeficiency.o build/source/transformation/Configuration.o build/source/transformation/Factory.o build/source/transformation/GammaModification.o build/source/transformation/Invert.o build/source/transformation/Quantization.o build/source/transformation/Transformation.o -Lbuild/C:/msys64/mingw64/lib -LC:/msys64/mingw64/lib -Lbuild/C:/msys64/mingw64/lib -LC:/msys64/mingw64/lib -lgtk-3 -lgdk-3 -lz -lgdi32 -limm32 -lshell32 -lole32 -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -llua -lm -lboost_filesystem -lboost_system -lexpat[/src]
 
Die Library-Suchpfade
Code:
Expand Collapse Copy
-Lbuild/C:/msys64/mingw64/lib -LC:/msys64/mingw64/lib -Lbuild/C:/msys64/mingw64/lib -LC:/msys64/mingw64/lib
sehen fuer mich ein wenig seltsam aus, sind aber unter Windows/MSYS vielleicht normal - ist schon eine Weile her seitdem ich es benutzt habe.

Nun aber die Frage - sind die DLLs und/oder DLL-Import-Libraries fuer boost_filesystem und boost_system in "C:/msys64/mingw64/lib"? Ich vermute mal, die muessten "libboost_filesystem.dll(.a)" und "libboost_system.dll(.a)" heissen.
Ich nehme an der Output sagt dir, dass g++/ld die Libraries nicht finden kann?
 
So sieht der Fehler aus der nach dem Befehl auftaucht:

[src=text]C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lboost_filesystem
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lboost_system
collect2.exe: error: ld returned 1 exit status
scons: *** [build/gpick.exe] Error 1
scons: building terminated because of errors.
[/src]
 
  • Thread Starter Thread Starter
  • #14
Sauber Jungs, Danke für die Mühe.

Bin gespannt ob man das hinbekommt. Eventuell neuer Wettbewerb :-).

Gruß
Woodstock
 
Sind denn die beiden Boost-Libraries (.dll oder .dll.a) in C:/msys64/mingw64/lib? Oder sind da eventuell nur die "mt"-Versionen, also boost_system-mt und boost_filesystem-mt, oder gar keine?
 


Unter "mingw64/lib" finden sich unter anderem folgende Schemas:
[kw]libboost_system-mt.a[/kw]
[kw]libboost_system-mt.dll.a[/kw]

Und dann noch andere wie:
[kw]libboost_filesystem-mt.a[/kw]
[kw]libboost_filesystem-mt.dll.a[/kw]

Einen Ordner "Boost" gibt es dort nicht. Dieser findet sich aber hier in [kw]C:\msys64\mingw64\include\boost[/kw] mit Quelldateien.
 
Ok, du hast nur die multi-threaded-Versionen ("mt") von Boost, aber CMake versucht aus irgendeinem Grund, gegen die nicht-mt-Version zu linken.

Schneller Workaround: Nimm die Kommandozeile aus Post #11 und patche "-lboost_filesystem -lboost_system" zu "-lboost_filesystem-mt -lboost_system-mt". Dann fuehre sie in der Shell aus. Da das eh der letzte Schritt im Makefile ist...

Ansonsten eventuell mal versuchen, cmake mit "-DBoost_USE_MULTITHREADED=ON" auszufuehren.
 
Super, das funktioniert! :cool:

Ich habe dazu mal alle DLLs gesammelt die notwendig sind und in eine Paket gebundelt.
Was allerdings komisch ist, ist folgender Error beim Start des Programms und dann beendet es auch gleich wieder... hier der Screenshot aus einer Powershell.



Wenn ich richtig sehe, wird dabei nach der Lua Version (Lua5.3 DLL ist enthalten) gesucht die zum kompilieren verwendet wurde. Ich bin mir aber nicht sicher wie das integriert wird und ob man Lua5.3 dann komplett mitliefern lassen muß.

Edith sagt: Also, es scheint an den Icons zu liegen, die Ausführung funktioniert unter MSYS2. ohne sichtbare Probleme.
 
Zuletzt bearbeitet:
Habs hinbekommen.. man muß die Icons an die richtige Stelle kopieren und den Cache des Themes neu aufbauen mittels " ".

Und hier die Version zum Download für Windows 10, 64 bit:

Danke Dr.M für die viele Hilfe! :)

Edit: Musste den Upload neu machen weil ein Fehler mit dem Icon Cache aufgetreten war, dafür ist die Version auch unter Windows 7 64bit getestet zu funktionieren.
 
Zuletzt bearbeitet:
Danke theSplit fuer die Muehen. Schoen dass es am Ende geklappt hat.

Fuer die fehlerhafte #ifdef-Direktive habe ich mal eben einen PR gemacht: . Es gab auch schon einen offenen Bugreport dazu. Bevor das wieder vergessen geht und der Naechste darueber stolpert...
 
Zurück
Oben