I am attempting to cross compile an application using mingw32 but running into a linking issue. Hamlib 4.1 release statically built and installed with the following commands:
export RANLIB=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-ranlib
./configure --host=x86_64-w64-mingw32.static --enable-static --disable-shared --without-cxx-binding --prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static --exec-prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static
make
sudo make install
$ ls /usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib*
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib++.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib++.la
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib.la
The application compiles fine, but when it reaches the linking stage fails as follows:
Seemed to have resolved this..... rebuilt hamlib (git) with commands:
export RANLIB=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-ranlib
export STRIP=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-strip
./configure --host=x86_64-w64-mingw32.static --enable-static --disable-shared --without-cxx-binding --prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static
make
sudo make install-strip
and a couple other changes to the Qt project file (related to pkg-config which really didn't seem to make a difference in the linking stage), but the application compiled and linked fine.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I am attempting to cross compile an application using mingw32 but running into a linking issue. Hamlib 4.1 release statically built and installed with the following commands:
export RANLIB=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-ranlib
./configure --host=x86_64-w64-mingw32.static --enable-static --disable-shared --without-cxx-binding --prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static --exec-prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static
make
sudo make install
$ ls /usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib*
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib++.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib++.la
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib.la
The application compiles fine, but when it reaches the linking stage fails as follows:
x86_64-w64-mingw32.static-g++ -Wl,-s -Wl,--gc-sections -Wl,-subsystem,windows -mthreads -o release/softrx.exe release/main.o release/mainwindow.o release/serial.o release/delegates.o release/softrx_plugin_import.o release/moc_mainwindow.o release/moc_serial.o release/moc_delegates.o -lusb-1.0 -lhamlib /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/styles/libqwindowsvistastyle.a -L/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/platforms/libqwindows.a -lwinspool -lwtsapi32 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5EventDispatcherSupport.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5FontDatabaseSupport.a -ldwrite -ld2d1 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5ThemeSupport.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5AccessibilitySupport.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5WindowsUIAutomationSupport.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqgif.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqicns.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqico.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqjp2.a -ljasper /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqjpeg.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqmng.a -lmng -llcms2 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqtga.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqtiff.a -ltiff -llzma -ljpeg /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqwbmp.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/imageformats/libqwebp.a -lwebpmux -lwebpdemux -lwebp /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/bearer/libqgenericbearer.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/sqldrivers/libqsqlite.a -lsqlite3 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/sqldrivers/libqsqlmysql.a -L/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib -lmysqlclient /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/sqldrivers/libqsqlodbc.a -lodbc32 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/sqldrivers/libqsqlpsql.a -lpq -lsecur32 -lpthread /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/plugins/sqldrivers/libqsqltds.a -lsybdb /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5Widgets.a -luxtheme -ldwmapi /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5Gui.a -ld3d11 -ldxgi -ldxguid -lharfbuzz -lcairo -lgobject-2.0 -lfontconfig -lfreetype -lm -lusp10 -lmsimg32 -lpixman-1 -lffi -lexpat -lbz2 -lpng16 -lharfbuzz_too -lfreetype_too -lglib-2.0 -lshlwapi -lpcre -lintl -liconv -lcomdlg32 -loleaut32 -limm32 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5WebSockets.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5Network.a -ldnsapi -liphlpapi -lssl -lcrypto -lgdi32 -lcrypt32 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5Sql.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5SerialPort.a -lsetupapi /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libQt5Core.a -lmpr -luserenv -lversion -lz -lpcre2-16 -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm -lmingw32 /usr/lib/mxe/usr/x86_64-w64-mingw32.static/qt5/lib/libqtmain.a -lshell32
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libhamlib.a(usb_port.o): In function
find_and_open_device': /home/eric/src/hamlib/hamlib-4.1/src/usb_port.c:83: undefined reference tolibusb_get_device_list'/home/eric/src/hamlib/hamlib-4.1/src/usb_port.c:98: undefined reference to
libusb_get_device_descriptor' /home/eric/src/hamlib/hamlib-4.1/src/usb_port.c:110: undefined reference tolibusb_open'...
...
collect2: error: ld returned 1 exit status
Thoughts appreciated.
Additional note, libusb-1.0 (1.0.24) is installed as provided by the mingw32 toolkit (MXE packages on Debian Buster):
$ ls /usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusb*
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusb-1.0.a /usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusbd.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusb-1.0.la /usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusbport.a
/usr/lib/mxe/usr/x86_64-w64-mingw32.static/lib/libusbcamd2.a
Perhaps the hamlib build picked up the system libusb instead of the cross-compile environment libusb??
Seemed to have resolved this..... rebuilt hamlib (git) with commands:
export RANLIB=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-ranlib
export STRIP=/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-strip
./configure --host=x86_64-w64-mingw32.static --enable-static --disable-shared --without-cxx-binding --prefix=/usr/lib/mxe/usr/x86_64-w64-mingw32.static
make
sudo make install-strip
and a couple other changes to the Qt project file (related to pkg-config which really didn't seem to make a difference in the linking stage), but the application compiled and linked fine.