Building_64 bit_binaries_for_Windows - jontio/libaeroambe GitHub Wiki

Compiling 64 bit binaries for Windows

Intro

I’ve been flooded with emails about how to compile libaeroambe on Windows. As my normal Windows computer already has a build environment set up I was going to use my laptop which doesn’t have one and install one on documenting how I did it as I went. However after spending a day of trying to get a new SSD working on it and trying to dual boot it, I can’t get Windows to mount it even though it can see it. The BIOS (UEFI) doesn’t mention the drive but when booting Linux from a USB flash drive it can see and access both drives format the new drive etc. In addition Windows seem so confused about the new SSD that even booting into Windows is hit and miss. In Windows when using diskpart if I select disk 0 the moment I list the volumes then list disks again it switches back to disk 1, arrrgh. So instead I’m afraid I’m just going to have to document how I do things on my normal main computer where the build environment is already set up.

Here I’ll assume everyone is using a 64-bit Windows computer of some description.

MSYS2

For Windows install my first point of call is always MSYS2...

MSYS2 comes with the package manager called pacman and allows you to install things from a centralized repository.

Download the 64-bit MSYS2 installer. I found the MSYS2 download link rather slow so I copied it over and put it in a Google drive if you think it might be faster...

https://drive.google.com/file/d/1seRrUtbgllH3tnkxp7Ph6WWPfirO3uLB/view?usp=sharing

SHA256: 3b233de38cb0393b40617654409369e025b5e6262d3ad60dbd6be33b4eeb8e7b

Follow the instructions on the MSYS2 page at least up until you have finished updating pacman -Su

Now you have MSYS2 installed you can use the package manager pacman to download the usual packages such as git, qt, qmake, etc.

What does my setup look like?

My setup is a little odd but I will document it here.

These are the packages that pacman has installed...

$ pacman -Q
autoconf 2.69-5
autogen 5.18.12-2
automake-wrapper 11-1
automake1.10 1.10.3-3
automake1.11 1.11.6-3
automake1.12 1.12.6-3
automake1.13 1.13.4-4
automake1.14 1.14.1-3
automake1.15 1.15.1-1
automake1.16 1.16.1-1
automake1.6 1.6.3-2
automake1.7 1.7.9-2
automake1.8 1.8.5-3
automake1.9 1.9.6-2
bash 4.4.023-1
bash-completion 2.8-2
binutils 2.30-1
brotli 1.0.7-1
bsdcpio 3.3.3-3
bsdtar 3.3.3-3
bzip2 1.0.6-2
ca-certificates 20170717-2
coreutils 8.30-1
crypt 1.4-1
curl 7.61.1-1
dash 0.5.10.2-1
db 5.3.28-2
diffutils 3.6-1
file 5.35-1
filesystem 2018.08-1
findutils 4.6.0-1
flex 2.6.4-1
gawk 4.2.1-1
gcc 7.3.0-3
gcc-fortran 7.3.0-3
gcc-libs 7.3.0-3
gdbm 1.18.1-1
gettext 0.19.8.1-1
glib2 2.54.3-1
gmp 6.1.2-1
gnupg 2.2.10-1
grep 3.1-1
gzip 1.9-1
heimdal-libs 7.5.0-2
icu 62.1-1
inetutils 1.9.4-1
info 6.5-2
isl 0.19-1
less 530-1
libarchive 3.3.3-3
libasprintf 0.19.8.1-1
libassuan 2.5.1-1
libbz2 1.0.6-2
libcrypt 2.1-2
libcurl 7.61.1-1
libdb 5.3.28-2
libedit 3.1-20170329
libexpat 2.2.6-1
libffi 3.2.1-3
libgc 8.0.0-1
libgcrypt 1.8.4-1
libgdbm 1.18.1-1
libgettextpo 0.19.8.1-1
libgnutls 3.6.3-1
libgpg-error 1.32-1
libgpgme 1.12.0-1
libguile 2.2.4-1
libhogweed 3.4-1
libiconv 1.15-1
libidn 1.35-1
libidn2 2.0.5-1
libintl 0.19.8.1-1
libksba 1.3.5-1
libltdl 2.4.6-5
liblz4 1.8.3-1
liblzma 5.2.4-1
liblzo2 2.10-2
libmetalink 0.1.3-2
libnettle 3.4-1
libnghttp2 1.34.0-1
libnpth 1.6-1
libopenssl 1.0.2.p-2
libp11-kit 0.23.14-1
libpcre 8.42-1
libpcre16 8.42-1
libpcre32 8.42-1
libpcrecpp 8.42-1
libpcreposix 8.42-1
libpsl 0.20.2-1
libreadline 7.0.005-1
libsqlite 3.21.0-4
libssh2 1.8.0-1
libtasn1 4.13-1
libtool 2.4.6-5
libunistring 0.9.10-1
libutil-linux 2.32.1-1
libxml2 2.9.8-1
libxslt 1.1.32-1
lndir 1.0.3-1
m4 1.4.18-2
make 4.2.1-1
mingw-w64-i686-assimp 4.1.0-2
mingw-w64-i686-binutils 2.30-5
mingw-w64-i686-brotli 1.0.7-1
mingw-w64-i686-bzip2 1.0.6-6
mingw-w64-i686-c-ares 1.15.0-1
mingw-w64-i686-ca-certificates 20170211-2
mingw-w64-i686-cairo 1.16.0-1
mingw-w64-i686-clang 7.0.0-1
mingw-w64-i686-clang-tools-extra 7.0.0-1
mingw-w64-i686-cmake 3.12.3-1
mingw-w64-i686-crt-git 7.0.0.5255.83bdce54-1
mingw-w64-i686-curl 7.61.1-4
mingw-w64-i686-dbus 1.12.10-1
mingw-w64-i686-expat 2.2.6-1
mingw-w64-i686-fontconfig 2.13.1-1
mingw-w64-i686-freeglut 3.0.0-4
mingw-w64-i686-freetype 2.9.1-1
mingw-w64-i686-gcc 7.3.0-2
mingw-w64-i686-gcc-fortran 7.3.0-2
mingw-w64-i686-gcc-libgfortran 7.3.0-2
mingw-w64-i686-gcc-libs 7.3.0-2
mingw-w64-i686-gdb 8.2-1
mingw-w64-i686-gdbm 1.18.1-1
mingw-w64-i686-gettext 0.19.8.1-6
mingw-w64-i686-giflib 5.1.4-2
mingw-w64-i686-glib2 2.58.1-1
mingw-w64-i686-gmp 6.1.2-1
mingw-w64-i686-gnutls 3.6.4-1
mingw-w64-i686-graphite2 1.3.12-1
mingw-w64-i686-harfbuzz 2.0.2-1
mingw-w64-i686-headers-git 7.0.0.5255.83bdce54-1
mingw-w64-i686-icu 62.1-1
mingw-w64-i686-icu-debug-libs 62.1-1
mingw-w64-i686-isl 0.19-1
mingw-w64-i686-jansson 2.11-1
mingw-w64-i686-jasper 2.0.14-1
mingw-w64-i686-jemalloc 5.1.0-3
mingw-w64-i686-jsoncpp 1.8.4-3
mingw-w64-i686-lcms2 2.9-1
mingw-w64-i686-libarchive 3.3.3-2
mingw-w64-i686-libffi 3.2.1-4
mingw-w64-i686-libgcrypt 1.8.4-1
mingw-w64-i686-libgpg-error 1.32-1
mingw-w64-i686-libiconv 1.15-3
mingw-w64-i686-libidn 1.35-1
mingw-w64-i686-libidn2 2.0.5-1
mingw-w64-i686-libjpeg-turbo 2.0.0-1
mingw-w64-i686-libmetalink 0.1.3-3
mingw-w64-i686-libmng 2.0.3-4
mingw-w64-i686-libpng 1.6.35-1
mingw-w64-i686-libpsl 0.20.2-1
mingw-w64-i686-libssh2 1.8.0-3
mingw-w64-i686-libsystre 1.0.1-4
mingw-w64-i686-libtasn1 4.13-1
mingw-w64-i686-libtiff 4.0.9-2
mingw-w64-i686-libtre-git r128.6fb7206-2
mingw-w64-i686-libunistring 0.9.10-1
mingw-w64-i686-libusb 1.0.22-1
mingw-w64-i686-libuv 1.23.2-1
mingw-w64-i686-libwebp 1.0.0-1
mingw-w64-i686-libwinpthread-git 7.0.0.5253.37101e0b-1
mingw-w64-i686-libxml2 2.9.8-1
mingw-w64-i686-libxslt 1.1.32-1
mingw-w64-i686-llvm 7.0.0-1
mingw-w64-i686-lz4 1.8.3-1
mingw-w64-i686-lzo2 2.10-1
mingw-w64-i686-make 4.2.1-2
mingw-w64-i686-minizip 2.5.2-2
mingw-w64-i686-mpc 1.1.0-1
mingw-w64-i686-mpdecimal 2.4.2-1
mingw-w64-i686-mpfr 4.0.1-2
mingw-w64-i686-ncurses 6.1.20180908-1
mingw-w64-i686-nettle 3.4-1
mingw-w64-i686-nghttp2 1.34.0-2
mingw-w64-i686-octopi-git r941.6df0f8a-1
mingw-w64-i686-openal 1.19.1-1
mingw-w64-i686-openssl 1.1.1-4
mingw-w64-i686-p11-kit 0.23.14-1
mingw-w64-i686-pcre 8.42-1
mingw-w64-i686-pcre2 10.32-1
mingw-w64-i686-pixman 0.34.0-3
mingw-w64-i686-python2 2.7.15-3
mingw-w64-i686-python3 3.7.1-2
mingw-w64-i686-qbs 1.12.1-1
mingw-w64-i686-qt-creator 4.7.1-1
mingw-w64-i686-qt-installer-framework-git r3011.370f61be-2
mingw-w64-i686-qt5 5.11.2-3
mingw-w64-i686-qt5-static 5.11.2-3
mingw-w64-i686-qtbinpatcher 2.2.0-2
mingw-w64-i686-readline 7.0.005-1
mingw-w64-i686-rhash 1.3.6-2
mingw-w64-i686-rtmpdump-git r512.fa8646d-3
mingw-w64-i686-spdylay 1.4.0-1
mingw-w64-i686-sqlite3 3.25.2-1
mingw-w64-i686-szip 2.1.1-2
mingw-w64-i686-tcl 8.6.8-1
mingw-w64-i686-termcap 1.3.1-3
mingw-w64-i686-tk 8.6.8-1
mingw-w64-i686-tools-git 7.0.0.5242.1b29d1bc-1
mingw-w64-i686-vulkan 1.1.73.0-1
mingw-w64-i686-windows-default-manifest 6.4-3
mingw-w64-i686-wineditline 2.205-1
mingw-w64-i686-winpthreads-git 7.0.0.5253.37101e0b-1
mingw-w64-i686-xpm-nox 4.2.0-5
mingw-w64-i686-xz 5.2.4-1
mingw-w64-i686-z3 4.7.1-2
mingw-w64-i686-zlib 1.2.11-4
mingw-w64-i686-zstd 1.3.7-1
mingw-w64-i686-zziplib 0.13.69-1
mingw-w64-x86_64-assimp 4.1.0-2
mingw-w64-x86_64-binutils 2.30-5
mingw-w64-x86_64-brotli 1.0.7-1
mingw-w64-x86_64-bzip2 1.0.6-6
mingw-w64-x86_64-c-ares 1.15.0-1
mingw-w64-x86_64-ca-certificates 20170211-2
mingw-w64-x86_64-cairo 1.16.0-1
mingw-w64-x86_64-clang 7.0.0-1
mingw-w64-x86_64-clang-tools-extra 7.0.0-1
mingw-w64-x86_64-cmake 3.12.3-1
mingw-w64-x86_64-crt-git 7.0.0.5255.83bdce54-1
mingw-w64-x86_64-curl 7.61.1-4
mingw-w64-x86_64-dbus 1.12.10-1
mingw-w64-x86_64-expat 2.2.6-1
mingw-w64-x86_64-fontconfig 2.13.1-1
mingw-w64-x86_64-freeglut 3.0.0-4
mingw-w64-x86_64-freetype 2.9.1-1
mingw-w64-x86_64-gcc 8.2.0-3
mingw-w64-x86_64-gcc-fortran 8.2.0-3
mingw-w64-x86_64-gcc-libgfortran 8.2.0-3
mingw-w64-x86_64-gcc-libs 8.2.0-3
mingw-w64-x86_64-gdb 8.2-1
mingw-w64-x86_64-gdbm 1.18.1-1
mingw-w64-x86_64-gettext 0.19.8.1-6
mingw-w64-x86_64-giflib 5.1.4-2
mingw-w64-x86_64-glib2 2.58.1-1
mingw-w64-x86_64-gmp 6.1.2-1
mingw-w64-x86_64-graphite2 1.3.12-1
mingw-w64-x86_64-harfbuzz 2.0.2-1
mingw-w64-x86_64-headers-git 7.0.0.5255.83bdce54-1
mingw-w64-x86_64-icu 62.1-1
mingw-w64-x86_64-icu-debug-libs 62.1-1
mingw-w64-x86_64-isl 0.19-1
mingw-w64-x86_64-jansson 2.11-1
mingw-w64-x86_64-jasper 2.0.14-1
mingw-w64-x86_64-jemalloc 5.1.0-3
mingw-w64-x86_64-jsoncpp 1.8.4-3
mingw-w64-x86_64-lcms2 2.9-1
mingw-w64-x86_64-libarchive 3.3.3-2
mingw-w64-x86_64-libffi 3.2.1-4
mingw-w64-x86_64-libgcrypt 1.8.4-1
mingw-w64-x86_64-libgpg-error 1.32-1
mingw-w64-x86_64-libiconv 1.15-3
mingw-w64-x86_64-libidn2 2.0.5-1
mingw-w64-x86_64-libjpeg-turbo 2.0.0-1
mingw-w64-x86_64-libmariadbclient 2.3.7-1
mingw-w64-x86_64-libmetalink 0.1.3-3
mingw-w64-x86_64-libmng 2.0.3-4
mingw-w64-x86_64-libpng 1.6.35-1
mingw-w64-x86_64-libpsl 0.20.2-1
mingw-w64-x86_64-libssh2 1.8.0-3
mingw-w64-x86_64-libsystre 1.0.1-4
mingw-w64-x86_64-libtasn1 4.13-1
mingw-w64-x86_64-libtiff 4.0.9-2
mingw-w64-x86_64-libtre-git r128.6fb7206-2
mingw-w64-x86_64-libunistring 0.9.10-1
mingw-w64-x86_64-libuv 1.23.2-1
mingw-w64-x86_64-libwebp 1.0.0-1
mingw-w64-x86_64-libwinpthread-git 7.0.0.5253.37101e0b-1
mingw-w64-x86_64-libxml2 2.9.8-1
mingw-w64-x86_64-libxslt 1.1.32-1
mingw-w64-x86_64-llvm 7.0.0-1
mingw-w64-x86_64-lz4 1.8.3-1
mingw-w64-x86_64-lzo2 2.10-1
mingw-w64-x86_64-make 4.2.1-2
mingw-w64-x86_64-minizip 2.5.2-2
mingw-w64-x86_64-mpc 1.1.0-1
mingw-w64-x86_64-mpdecimal 2.4.2-1
mingw-w64-x86_64-mpfr 4.0.1-2
mingw-w64-x86_64-ncurses 6.1.20180908-1
mingw-w64-x86_64-nettle 3.4-1
mingw-w64-x86_64-nghttp2 1.34.0-2
mingw-w64-x86_64-openal 1.19.1-1
mingw-w64-x86_64-openssl 1.1.1-4
mingw-w64-x86_64-p11-kit 0.23.14-1
mingw-w64-x86_64-pcre 8.42-1
mingw-w64-x86_64-pcre2 10.32-1
mingw-w64-x86_64-pixman 0.34.0-3
mingw-w64-x86_64-python2 2.7.15-3
mingw-w64-x86_64-python3 3.7.1-2
mingw-w64-x86_64-qbs 1.12.1-1
mingw-w64-x86_64-qt-creator 4.7.1-1
mingw-w64-x86_64-qt-installer-framework-git r3011.370f61be-2
mingw-w64-x86_64-qt5 5.11.2-3
mingw-w64-x86_64-qt5-static 5.11.2-3
mingw-w64-x86_64-qtbinpatcher 2.2.0-2
mingw-w64-x86_64-readline 7.0.005-1
mingw-w64-x86_64-rhash 1.3.6-2
mingw-w64-x86_64-sqlite3 3.25.2-1
mingw-w64-x86_64-szip 2.1.1-2
mingw-w64-x86_64-tcl 8.6.8-1
mingw-w64-x86_64-termcap 1.3.1-3
mingw-w64-x86_64-tk 8.6.8-1
mingw-w64-x86_64-tools-git 7.0.0.5242.1b29d1bc-1
mingw-w64-x86_64-vulkan 1.1.73.0-1
mingw-w64-x86_64-windows-default-manifest 6.4-3
mingw-w64-x86_64-wineditline 2.205-1
mingw-w64-x86_64-winpthreads-git 7.0.0.5253.37101e0b-1
mingw-w64-x86_64-xpm-nox 4.2.0-5
mingw-w64-x86_64-xz 5.2.4-1
mingw-w64-x86_64-z3 4.7.1-2
mingw-w64-x86_64-zlib 1.2.11-4
mingw-w64-x86_64-zstd 1.3.7-1
mingw-w64-x86_64-zziplib 0.13.69-1
mintty 1~2.9.3-1
mpc 1.1.0-1
mpfr 4.0.1-1
msys2-keyring r9.397a52e-1
msys2-launcher-git 0.3.32.56c2ba7-2
msys2-runtime 2.11.1-2
msys2-runtime-devel 2.11.1-2
msys2-w32api-headers 6.0.0.5223.7f9d8753-1
msys2-w32api-runtime 6.0.0.5223.7f9d8753-1
nano 3.1-1
ncurses 6.1.20180908-1
nettle 3.4-1
openssl 1.0.2.p-2
p11-kit 0.23.14-1
pacman 5.1.1-3
pacman-mirrors 20180604-2
pactoys-git r2.07ca37f-1
pax-git 20161104.2-1
pcre 8.42-1
perl 5.28.0-1
pinentry 1.1.0-2
pkg-config 0.29.2-1
pkgfile 17-1
rebase 4.4.4-1
sed 4.5-1
tar 1.30-1
tftp-hpa 5.2-2
time 1.9-1
tzcode 2018.c-1
util-linux 2.32.1-1
wget 1.19.5-1
which 2.21-2
windows-default-manifest 6.4-1
winpty 0.4.3-1
xz 5.2.4-1
zlib 1.2.11-1

I have both 64 and 32 bit packages (eg mingw-w64-i686 is a 32-bit package while mingw-w64-x86_64 is for 64-bit package) you will only need to install the 64-bit ones. I am missing git. I do have this installed on my computer but I installed it from the git website in the traditional Windows installation method.

qtcreator (this is a GUI IDE environment for C++) for the last year or so I have found has a bug in it on my computer at least (and others) where the CPU is stuck at 25% even when doing nothing. So the qtcreator I use is an older version that doesn’t have this bug in. I downloaded this separately from the Qt framework. I should really delete those qtcreator packages that pacman installed.

So to sum up my setup is...

  • MSYS2 obtains most of the programs I use, Qt framework, cmake etc
  • I use MinGW as my compiler and not MSVC
  • I use an old qtcreator manually installed
  • git is installed from the git webpage directly in the usual window ideology

What do you need?

I’m not sure exactly which packages are needed as I have all sorts but I can give you the few that will either be handy or are needed.

To install new packages you use the pacman -S command from the MinGW-w64 Win64 Shell. You can search for packages using the pacman -Ss command. If you want pacman to do something that you don’t know how to do then I suggest doing an internet search and looking through https://github.com/msys2/msys2/wiki/Using-packages as that’s usually the quickest way.

I suggest getting pacman to install...

  • git
  • mingw-w64-x86_64-qt5
  • mingw-w64-x86_64-gcc
  • mingw-w64-x86_64-make
  • mingw-w64-x86_64-cmake

You may need to install more packages than that but you’ll quickly find out when you try to compile something and it will tell you something is missing. That point searching the web is the next step.

So I believe you should type the following...

Pacman -S git mingw-w64-x86_64-qt5 mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-cmake

Quick example

I’m missing the git package so for example I will install that one...

$ pacman -S git
resolving dependencies...
looking for conflicting packages...

Packages (32) expat-2.2.6-1  heimdal-7.5.0-2  libpcre2_8-10.32-1  openssh-7.9p1-1  perl-Authen-SASL-2.16-2  perl-Convert-BinHex-1.125-1
              perl-Encode-Locale-1.05-1  perl-Error-0.17027-1  perl-File-Listing-6.04-2  perl-HTML-Parser-3.72-3  perl-HTML-Tagset-3.20-2
              perl-HTTP-Cookies-6.04-1  perl-HTTP-Daemon-6.01-2  perl-HTTP-Date-6.02-2  perl-HTTP-Message-6.18-1  perl-HTTP-Negotiate-6.01-2
              perl-IO-Socket-SSL-2.060-1  perl-IO-stringy-2.111-1  perl-LWP-MediaTypes-6.02-2  perl-MIME-tools-5.509-1  perl-MailTools-2.20-1
              perl-Net-HTTP-6.18-1  perl-Net-SMTP-SSL-1.04-1  perl-Net-SSLeay-1.85-1  perl-TermReadKey-2.37-3  perl-TimeDate-2.30-2  perl-Try-Tiny-0.30-1
              perl-URI-1.74-1  perl-WWW-RobotRules-6.02-2  perl-libwww-6.36-1  vim-8.1.0500-1  git-2.19.1-1

Total Download Size:   14.19 MiB
Total Installed Size:  81.67 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 expat-2.2.6-1-x86_64                                                  42.6 KiB  20.8M/s 00:00 [######################################################] 100%
 libpcre2_8-10.32-1-x86_64                                            117.8 KiB   595K/s 00:00 [######################################################] 100%
 vim-8.1.0500-1-x86_64                                                  6.8 MiB  1283K/s 00:05 [######################################################] 100%
 heimdal-7.5.0-2-x86_64                                               425.5 KiB  1788K/s 00:00 [######################################################] 100%
 openssh-7.9p1-1-x86_64                                               686.5 KiB  1582K/s 00:00 [######################################################] 100%
 perl-Error-0.17027-1-any                                              39.2 KiB  19.1M/s 00:00 [######################################################] 100%
 perl-Authen-SASL-2.16-2-any                                           42.4 KiB  20.7M/s 00:00 [######################################################] 100%
 perl-Encode-Locale-1.05-1-any                                         24.3 KiB  11.8M/s 00:00 [######################################################] 100%
 perl-HTTP-Date-6.02-2-any                                              8.6 KiB  0.00B/s 00:00 [######################################################] 100%
 perl-File-Listing-6.04-2-any                                           7.7 KiB  7.51M/s 00:00 [######################################################] 100%
 perl-HTML-Tagset-3.20-2-any                                           10.3 KiB  0.00B/s 00:00 [######################################################] 100%
 perl-HTML-Parser-3.72-3-x86_64                                        93.1 KiB  15.1M/s 00:00 [######################################################] 100%
 perl-LWP-MediaTypes-6.02-2-any                                        18.0 KiB  0.00B/s 00:00 [######################################################] 100%
 perl-URI-1.74-1-any                                                   92.8 KiB  15.1M/s 00:00 [######################################################] 100%
 perl-HTTP-Message-6.18-1-any                                          89.5 KiB  12.5M/s 00:00 [######################################################] 100%
 perl-HTTP-Cookies-6.04-1-any                                          34.5 KiB  16.9M/s 00:00 [######################################################] 100%
 perl-HTTP-Daemon-6.01-2-any                                           14.2 KiB  13.9M/s 00:00 [######################################################] 100%
 perl-HTTP-Negotiate-6.01-2-any                                        11.4 KiB  11.2M/s 00:00 [######################################################] 100%
 perl-Net-HTTP-6.18-1-any                                              38.2 KiB  12.4M/s 00:00 [######################################################] 100%
 perl-WWW-RobotRules-6.02-2-any                                        12.2 KiB  12.0M/s 00:00 [######################################################] 100%
 perl-Try-Tiny-0.30-1-any                                              32.0 KiB  15.6M/s 00:00 [######################################################] 100%
 perl-libwww-6.36-1-any                                               143.5 KiB  14.0M/s 00:00 [######################################################] 100%
 perl-TimeDate-2.30-2-any                                              35.9 KiB  11.7M/s 00:00 [######################################################] 100%
 perl-MailTools-2.20-1-any                                             74.9 KiB  2.22M/s 00:00 [######################################################] 100%
 perl-IO-stringy-2.111-1-any                                           52.6 KiB  17.1M/s 00:00 [######################################################] 100%
 perl-Convert-BinHex-1.125-1-any                                       42.8 KiB  13.9M/s 00:00 [######################################################] 100%
 perl-MIME-tools-5.509-1-any                                          194.9 KiB  14.6M/s 00:00 [######################################################] 100%
 perl-Net-SSLeay-1.85-1-x86_64                                        224.4 KiB  13.7M/s 00:00 [######################################################] 100%
 perl-IO-Socket-SSL-2.060-1-any                                       153.0 KiB  6.79M/s 00:00 [######################################################] 100%
 perl-Net-SMTP-SSL-1.04-1-any                                          18.4 KiB  0.00B/s 00:00 [######################################################] 100%
 perl-TermReadKey-2.37-3-x86_64                                        34.6 KiB  11.3M/s 00:00 [######################################################] 100%
 git-2.19.1-1-x86_64                                                    4.7 MiB  1345K/s 00:04 [######################################################] 100%
(32/32) checking keys in keyring                                                               [######################################################] 100%
(32/32) checking package integrity                                                             [######################################################] 100%
(32/32) loading package files                                                                  [######################################################] 100%
(32/32) checking for file conflicts                                                            [######################################################] 100%
(32/32) checking available disk space                                                          [######################################################] 100%
:: Processing package changes...
( 1/32) installing expat                                                                       [######################################################] 100%
( 2/32) installing libpcre2_8                                                                  [######################################################] 100%
( 3/32) installing vim                                                                         [######################################################] 100%
( 4/32) installing heimdal                                                                     [######################################################] 100%
( 5/32) installing openssh                                                                     [######################################################] 100%
( 6/32) installing perl-Error                                                                  [######################################################] 100%
( 7/32) installing perl-Authen-SASL                                                            [######################################################] 100%
( 8/32) installing perl-Encode-Locale                                                          [######################################################] 100%
( 9/32) installing perl-HTTP-Date                                                              [######################################################] 100%
(10/32) installing perl-File-Listing                                                           [######################################################] 100%
(11/32) installing perl-HTML-Tagset                                                            [######################################################] 100%
(12/32) installing perl-HTML-Parser                                                            [######################################################] 100%
(13/32) installing perl-LWP-MediaTypes                                                         [######################################################] 100%
(14/32) installing perl-URI                                                                    [######################################################] 100%
(15/32) installing perl-HTTP-Message                                                           [######################################################] 100%
(16/32) installing perl-HTTP-Cookies                                                           [######################################################] 100%
(17/32) installing perl-HTTP-Daemon                                                            [######################################################] 100%
(18/32) installing perl-HTTP-Negotiate                                                         [######################################################] 100%
(19/32) installing perl-Net-HTTP                                                               [######################################################] 100%
(20/32) installing perl-WWW-RobotRules                                                         [######################################################] 100%
(21/32) installing perl-Try-Tiny                                                               [######################################################] 100%
(22/32) installing perl-libwww                                                                 [######################################################] 100%
Optional dependencies for perl-libwww
    perl-LWP-Protocol-https: for https:// url schemes
(23/32) installing perl-TimeDate                                                               [######################################################] 100%
(24/32) installing perl-MailTools                                                              [######################################################] 100%
(25/32) installing perl-IO-stringy                                                             [######################################################] 100%
(26/32) installing perl-Convert-BinHex                                                         [######################################################] 100%
module test... pass.
(27/32) installing perl-MIME-tools                                                             [######################################################] 100%
(28/32) installing perl-Net-SSLeay                                                             [######################################################] 100%
(29/32) installing perl-IO-Socket-SSL                                                          [######################################################] 100%
(30/32) installing perl-Net-SMTP-SSL                                                           [######################################################] 100%
(31/32) installing perl-TermReadKey                                                            [######################################################] 100%
(32/32) installing git                                                                         [######################################################] 100%
Optional dependencies for git
    python2: various helper scripts
    subversion: git svn

Building

Now you should have a system that is able to build libaeroambe. The system you’ve set up is similar to a Linux environment. You have a home directory that you can get to by typing cd ~ and that directory you can obtain its name by typing PWD. In Windows Explorer you can find that directory where you have installed MSYS2. For example I have an E: drive that I have installed MSYS2 onto and my home folder is actually E:\msys64\home\Administrator. If you want access particular drive you can type something like cd /e which will take you to the E: drive. You’ll also notice in the system all the / and \ are reversed. That should be enough to get you moving around.

So I’ll type the following one of the time...

cd ~
mkdir git
cd git
git clone https://github.com/jontio/libaeroambe.git

This clones the libaeroambe repository onto your computer. It basically downloaded but adds fancy things such as version control. The output I got was...

Cloning into 'libaeroambe'...
remote: Enumerating objects: 142, done.
remote: Counting objects: 100% (142/142), done.
remote: Compressing objects: 100% (114/114), done.
remote: Total 142 (delta 25), reused 141 (delta 24), pack-reused 0
Receiving objects: 100% (142/142), 460.30 KiB | 668.00 KiB/s, done.
Resolving deltas: 100% (25/25), done.

Now we go into mbelib-master by typing...

cd libaeroambe/mbelib-master

We can have a look at the files by typing...

ls

In this directory we see CMakeLists.txt this means it’s a Cmake project.

ambe3600x2400.c        ambe3600x2450_const.h  CHANGELOG                 config.h   ecc_const.h      imbe7200x4400_const.h  mbelib_Author.pgp  test
ambe3600x2400_const.h  ambe4800x3600.c        cmake_uninstall.cmake.in  COPYRIGHT  imbe7100x4400.c  mbelib.c               mbelib_const.h
ambe3600x2450.c        ambe4800x3600_const.h  CMakeLists.txt            ecc.c      imbe7200x4400.c  mbelib.h               README.md

I’m not very good with Cmake so we will use the Cmake gui to build this by typing...

cmake-gui.exe

Hot tip: the tab button can be your friend. If you start typing cma then press tab it will either complete what you wanted to type or will give you suggestions.

This is where you need to fill in where is the source code and where to build the binaries the following figure shows my location but you will need to change that depending on where you have installed MSYS2 and what your username is...

Click on tools -> configure . At this point it may ask you to create the build directory if you have not done so. If it does then say yes. It will then ask you what compilers to use. I have a strange set up with all sorts of things on it so I always select specify native compilers and MinGW Makefiles...

It then asked me to specify where they are. For me they are in E:/msys64/mingw64/bin/. The C compiler should be called gcc, the C++ compiler should be called g++ and I’m not sure about the Fortran compiler but it’s needed for me for Armadillo and CBLAS, I suspect you won’t need to use it but I’m not sure...

This is where I get my first error...

And it says “For MinGW make to work correctly sh.exe must NOT be in your path.” This is because we have run the cmake gui from msys and not dos. Msys creates its own path that we can see by typing...

$ echo $PATH
/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/mingw32/bin

And we see...

$ whereis sh.exe
sh: /usr/bin/sh.exe /usr/share/man/man1/sh.1.gz

So indeed sh.exe is in our path. Usually what I do is I just run the program from DOS and that fixes my problem. However this time I’ll try something different and change the CMAKE_SH name value to CMAKE_SH-NOTFOUND. This means modifying the following...

To read this...

Then I click configure...

Now I noticed build shared libraries has not been ticked. We need to build the shared libraries so I tick BUILD_SHARED_LIBS...

Now I press generate...

Then I close the CMake GUI to go back to the console...

Then it’s into the build directory...

cd build

I’m never quite sure of the make command because Windows seems to have some make command as well but this time I’ll type...

mingw32-make.exe

Well, for me that worked enough to build the libraries. However it did then try to build something called gmock which it failed to do so during linking but I’m not interested in building that...

The main thing is we have both the shared and static libraries of the modified libmbe (libmbe.a libmbe.dll and libmbe.dll.a). We will only be using the shared ones. We could install this into the system but instead will just leave them there and move on to qt side of things.

Type...

cd ../../libaeroambe/ 

That moves us to the directory with the qt project it in.

Now type the following one at a time...

qmake "CONFIG+=release"
make

That should finish the build. The DLLs can be seen with...

ls release/

I’ll now install JAERO. I’ll do this using the command line but you probably have already done it or want to do it using the usual Windows method.

cd release
wget https://github.com/jontio/JAERO/releases/download/v1.0.4.8/JAERO-x64-setup.zip
pacman -S unzip
unzip JAERO-x64-setup.zip
./JAERO-x64-setup.exe

Do the GUI part of the install.

Close that and now I am going to copy over the DLLs into the application directory. Again you might want to do this using Windows management but I’ll just use the command line...

cp *.dll /c/Program\ Files/JAERO/
cp ../../mbelib-master/build/*.dll /c/Program\ Files/JAERO/

And everything should be installed. I’ll now check to make sure JAERO can load the DLLs...

/c/Program\ Files/JAERO/JAERO.exe

And lo and behold this time when starting it doesn’t mention that it can’t find or load the libraries...

So now I’ll go back to seeing if I can get my stupid laptop to work. I am almost at the point of deciding a hammer is the most appropriate tool for it. I wanted to create a dual boot system but there are no Linux desktop environments that I like anymore (the last one I liked was KDE4 such as on the Mandriva 2010), there are so many bells and whistles now but not any usability. I really don’t want transparent windows that wobble and half a dozen taskbars where everything is a nondescript icon and there is no text. Yup everything’s fancy but usability and control has gone. The scrollbars are ridiculously thin, everything else is too small, sometimes affirmative is on the left sometimes it’s on the right and usually there’s no way to tell the operating system what side you would prefer. If you do end up designing a desktop think about usability and people who don’t have a gigantic screen, don’t have good vision, or have shaky hands. Anyway, grumble grumble grumble.

Jonti 8/Nov/2018