BlackZork / mqmgateway

MQTT gateway for modbus networks
GNU Affero General Public License v3.0
44 stars 20 forks source link

Build ends up in error with latest compiler suite #31

Closed alpytron closed 10 months ago

alpytron commented 10 months ago

Hi, It seems there is an issue with latest compiler and it's not possible to link project. I'm getting the following error:

$ make
Scanning dependencies of target modmqttsrv
[  5%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/modbus_client.cpp.o
[ 10%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/modbus_context.cpp.o
[ 15%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/modbus_messages.cpp.o
[ 20%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/modbus_thread.cpp.o
[ 25%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/modmqtt.cpp.o
[ 30%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/mosquitto.cpp.o
[ 35%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/mqttclient.cpp.o
[ 40%] Building CXX object libmodmqttsrv/CMakeFiles/modmqttsrv.dir/mqttobject.cpp.o
[ 45%] Linking CXX shared library libmodmqttsrv.so
[ 80%] Built target modmqttsrv
[ 90%] Built target stdconv
Scanning dependencies of target modmqttd
[ 95%] Building CXX object modmqttd/CMakeFiles/modmqttd.dir/main.cpp.o
[100%] Linking CXX executable modmqttd
/usr/bin/c++     CMakeFiles/modmqttd.dir/main.cpp.o  -o modmqttd  -Wl,-rpath,/home/alpy/mqmgateway/libmodmqttsrv: ../libmodmqttsrv/libmodmqttsrv.so.1.0.0 -lmosquitto /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.6.2 /usr/lib/x86_64-linux-gnu/libboost_log.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 -lmodbus -lpthread /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.71.0 -lpthread 
/usr/bin/ld: ../libmodmqttsrv/libmodmqttsrv.so.1.0.0: undefined reference to `modmqttd::MsgRegisterPoll::INVALID_REFRESH'
collect2: error: ld returned 1 exit status
make[2]: *** [modmqttd/CMakeFiles/modmqttd.dir/build.make:97: modmqttd/modmqttd] Error 1
make[1]: *** [CMakeFiles/Makefile2:185: modmqttd/CMakeFiles/modmqttd.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

I could fix it by adding -DCMAKE_CXX_STANDARD="17" to cmake command line, so the full shell command was this: $ cmake -DWITHOUT_TESTS=1 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_CXX_STANDARD="17"

This fixes the 'static constexpr' linking issue. Please update documentation (README.md).

BlackZork commented 10 months ago

Hi and thanks for this report. What is your compiler version?

alpytron commented 10 months ago

Hi, This is the output of version queries:

$ cmake --version
cmake version 3.16.3

$ make --version
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu

$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

$ ld --version
GNU ld (GNU Binutils for Ubuntu) 2.34
BlackZork commented 10 months ago

I've added fix in 9cfa2d1608. I do not have gcc 9.x, so I cannot test it. It would be great if you could confirm if it works for you. Thanks!

alpytron commented 10 months ago

It works now, thanks for the fix.

However there was an other issue with CMakeLists.txt which caused build failure if catch2 was not installed. Even if I added -DWITHOUT_TESTS=1 cmake was still trying to process content of folder 'unittests', so it ended up in error, missing catch2 library. For a quick and dirty workaround I commented out the following 2 lines:

#add_dependencies(tests stdconv)
#add_subdirectory(unittests ${build_unittests})

After this the build was successful.

BlackZork commented 10 months ago

Fixed in ab55badbd73. Thanks!

alpytron commented 10 months ago

Perfect! Thanks.