You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
testmodbus-server/HowTo-Cross-Compile.md

6.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Cross Compile

This manual explains the steps to prepare a basic cross compiling environment on Debian. The build will be installed to /opt/W64-cross-compile. If the destination folder is set up right, you do not need any root rights.

The following packages are needed: (maybe wine is not anymore needed, haven't tested yet)

  • wine
  • wine64
  • mingw-w64
  • mingw-w64-tools
  • binutils-mingw-w64

The following sources are needed:

Prepare the cross-file.ini

This configuration file will be needed on all meson based builds.

[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = '/usr/bin/x86_64-w64-mingw32-gcc'
cpp = '/usr/bin/x86_64-w64-mingw32-g++'
ar = '/usr/bin/x86_64-w64-mingw32-ar'
strip = '/usr/bin/x86_64-w64-mingw32-strip'
pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config'
windres = '/usr/bin/x86_64-w64-mingw32-windres'
ld = '/usr/bin/x86_64-w64-mingw32-ld'
exe_wrapper = 'wine64'

lib-glib

Compile the library using the following steps.

mkdir build
cd build
meson --buildtype=release --prefix=/opt/W64-cross-compile/ --cross-file ../../cross-file.ini
mseon compile

if an error like glib/glibconfig.h:65:51: error: missing binary operator before token "(" occures edit the line and delete the G_GNUC_EXTENSION expression.

meson install

Because not all compiled *.dll files are installed into the destination we need to copy them manualy.

cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

atk

The flags -Dintrospection=false will tell meson to disable some building options. See the file meson_options.txt for some information. Compile the library using the following steps.

mkdir build
cd build
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig meson --buildtype=release -Dintrospection=false -Ddocs=false --prefix=/opt/W64-cross-compile/ --cross-file ../../cross-file.ini
meson compile
meson install

Copy manualy all compiled *.dll files to the destination

cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

pango

Compile the library using the following steps. This will also download and compile some more librarys like libpng and cairo librarys.

mkdir build
cd build
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig meson --buildtype=release --prefix=/opt/W64-cross-compile/ --cross-file ../../cross-file.ini
meson compile

In case of an error with unresolved symbols like undefined reference to '__strcat_chk'. You need to edit the cross-file.ini and add the linker flags/option -lssp to the c_link_args parameters. Remove the build directory and restart configuring and compiling this libraray again.

meson install
cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

gdk-pixbuf

mkdir build
cd build
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig meson --buildtype=release --prefix=/opt/W64-cross-compile/ --cross-file ../../cross-file.ini
meson compile
meson install
cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

libepoxy

mkdir build
cd build
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig meson --buildtype=release --prefix=/opt/W64-cross-compile/ --cross-file ../../cross-file.ini
meson compile
meson install
cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

GTK+-4

Configuration and Compilation of GTK

mkdir build
cd build
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig meson --buildtype=release --prefix=/opt/W64-cross-compile/ -Dmedia-gstreamer=disabled -Ddemos=false -Dbuild-examples=false -Dbuild-tests=false --cross-file ../../cross-file.ini
meson compile

If the compile process stops with error ../gdk/loaders/gdkjpeg.c:302:67: error: free undeclared (first use in this function) you need to add the line #include <stdlib.h>on top of the file, before the #include <jpeglib.h> line. Run the compile command again.

meson install
cp `find -name "*.dll"` /opt/W64-cross-compile/lib/

GTK+-3

preparation beacuse of wine

Copy all compiled executeble and library files into the wine windows/system folder.

cp /opt/W64-cross-compile/bin/*.exe ~/.wine/drive_c/windows/system32/
cp /opt/W64-cross-compile/lib/*.dll ~/.wine/drive_c/windows/system32/
cp /usr/x86_64-w64-mingw32/lib/zlib1.dll ~/.wine/drive_c/windows/system32/

workaround for some issues

Edit the file gdk/win32/gdkprivate-win32.h and search around line 300 for the following declaration. In some releases the compiler is missing the extern statement here.

300 /* The singleton selection object pointer */
301 extern GdkWin32Selection *_win32_selection;

compile first attempt

Configure and compile the library.

PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig ./configure --prefix=/opt/W64-cross-compile/ --host=x86_64-w64-mingw32
touch gdk/win32/winpointer.h
PKG_CONFIG_PATH=/opt/W64-cross-compile/lib/pkgconfig make

Compile Error: glib-compile-resources: file not found

make[2]: Verzeichnis „/home/steffen/test/GTKCross/gtk+-3.24.1/gdk“ wird betreten
/bin/bash: Zeile 1: /opt/W64-cross-compile/bin/glib-compile-resources: Datei oder Verzeichnis nicht gefunden
GEN      gdkresources.h
/bin/bash: Zeile 1: /opt/W64-cross-compile/bin/glib-compile-resources: Datei oder Verzeichnis nicht gefunden
make[2]: *** [Makefile:2243: gdkresources.h] Fehler 127

Edit the file gdk/Makefile append the windows .exe extension at the place where GLIB_COMPILE_RESOURCES is defined. Find all the other GLIB_COMPILE_RESOURCES occurences and add the wine command prior to all $(GLIB_COMPILE_RESOURCES) calls. Try to compile.

fix and install the compilation

/bin/bash: Zeile 1: ../../gtk/gtk-update-icon-cache.exe: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei
make[3]: *** [Makefile:1673: install-update-icon-cache] Fehler 126

Edit the Makefile in demos/gtk-demos and add in line the wine prefix where the . Try to run the make install`command and do the same for the next errors.

/bin/bash: Zeile 1: ../../gtk/gtk-update-icon-cache.exe: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei
make[5]: *** [Makefile:1184: install-update-icon-cache] Fehler 126
make[5]: Verzeichnis „/home/steffen/gtkcrosscompile/gtk+-3.24.0/demos/widget-factory“ wird verlassen

If the compilation did well copy all *.dll files into the destination.

cp `find -name "*.dll"` /opt/W64-cross-compile/lib/