Menu

Cross compile linking issue

Help
2021-06-09
2021-06-09
  • Eric Tichansky

    Eric Tichansky - 2021-06-09

    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.

     
  • Eric Tichansky

    Eric Tichansky - 2021-06-09

    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??

     
  • Eric Tichansky

    Eric Tichansky - 2021-06-09

    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.

     

Log in to post a comment.