Hi,
My C++ knowledge is very basic and I'm running into something I do not understand.
I build the RPM for my Sailfish OS app in a Docker environment I made: https://git.sr.ht/~aerique/sfosbid#codeeql5-sfoscode
If I follow the steps in the "eql5-sfos" section on my home PC it works, but if I do the same on my PC at work (also in Docker) I get this failure:
;;; Loading "/home/erikw/projects/eql5-sfos-git/lisp/app.asd" ;;; ;;; Compiling /home/erikw/projects/eql5-sfos-git/lisp/qml.lisp. ;;; OPTIMIZE levels: Safety=3, Space=0, Speed=0, Debug=3 ;;; ;;; End of Pass 1. ;;; Finished compiling /home/erikw/projects/eql5-sfos-git/lisp/qml.lisp. ;;; ;;; Loading "/home/erikw/.cache/common-lisp/ecl-20.4.24-unknown-linux-armv7l/home/erikw/projects/eql5-sfos-git/lisp/qml.fas" ;;; ;;; Compiling /home/erikw/projects/eql5-sfos-git/lisp/app.lisp. ;;; OPTIMIZE levels: Safety=3, Space=0, Speed=0, Debug=3 ;;; ;;; End of Pass 1. ;;; Finished compiling /home/erikw/projects/eql5-sfos-git/lisp/app.lisp. ;;; g++ -c -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -isystem /usr/include/sailfishapp -isystem /usr/include/mdeclarativecache5 -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtQuick -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtQml -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/qt5/QtCore -I. -I/usr/share/qt5/mkspecs/linux-g++ -o eql5-sfos.o src/eql5-sfos.cc g++ -Wl,-O1 -Wl,-rpath,/usr/share/eql5-sfos/lib -o eql5-sfos libapp.a eql5-sfos.o -lecl -leql5 -L. -lapp -lsailfishapp -pie -rdynamic -lmdeclarativecache5 -lQt5Quick -lQt5Gui -lQt5Qml -lQt5Network -lQt5Core -lGLESv2 -lpthread /srv/mer/toolings/SailfishOS-latest//opt/cross/bin/armv7hl-meego-linux-gnueabi-ld: eql5-sfos.o: in function `main': eql5-sfos.cc:(.text.startup+0x2c8): undefined reference to `init_lib_APP__ALL_SYSTEMS' collect2: error: ld returned 1 exit status make: *** [Makefile:170: eql5-sfos] Error 1
An `objdump libapp.a` shows not `init_lib_APP__ALL_SYSTEMS` but `init_lib__ECLAQZDC4E1_UK8FKC51` and if I replace the former with the latter in `src/eql5-sfos.cc` everything compiles as it should!
Anyone have any idea what might be causing this?
Regards, Erik
The error measage should mean: A function of the correct name is compiled into the library, but all versions of functions with the given name expects different parameters than requested by the program. A second possibility is that the function was compiled by a compiler that generates a different function name suffix for the requested set of parameters.
Kind regards,
Gunter.
On 12/18/20, Erik Winkels aerique@xs4all.nl wrote:
eql5-sfos.o: in function `main': eql5-sfos.cc:(.text.startup+0x2c8): undefined reference to `init_lib_APP__ALL_SYSTEMS' collect2: error: ld returned 1 exit status make: *** [Makefile:170: eql5-sfos] Error 1
In your 'make.lisp' in 'asdf:make-build' you could try to add a line with the init name:
(asdf:make-build "app" :monolithic t :type :static-library :move-here "./" :init-name "init_lib_APP__ALL_SYSTEMS")
This should fix it.
Paul