[MXS-4771] Problem while linking libnosqlprotocol.so Created: 2023-09-21  Updated: 2023-09-25  Resolved: 2023-09-22

Status: Closed
Project: MariaDB MaxScale
Component/s: build
Affects Version/s: 23.02
Fix Version/s: 6.4.11, 22.08.9, 23.02.5, 23.08.2

Type: Bug Priority: Major
Reporter: Xiaotong Niu Assignee: markus makela
Resolution: Fixed Votes: 0
Labels: None
Environment:

Ubuntu 20.04.6 LTS



 Description   

I hit a problem while building current MaxScale 23.02 from GitHub source on Ubuntu 20.04. Every time I get linking error like this:

Scanning dependencies of target nosqlprotocol
[ 57%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/clientconnection.cc.o
[ 57%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/configuration.cc.o
[ 57%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosql.cc.o
[ 57%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlbase.cc.o
[ 57%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlcommand.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlcommands.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlconfig.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlcontext.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlcrypto.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlcursor.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqldatabase.cc.o
[ 58%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlprotocol.cc.o
[ 59%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlscram.cc.o
[ 59%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlupdateoperator.cc.o
[ 59%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/nosqlusermanager.cc.o
[ 59%] Building CXX object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/protocolmodule.cc.o
[ 59%] Building C object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/checksum.c.o
[ 59%] Building C object server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/crc32-x86.c.o
[ 59%] Linking CXX shared library libnosqlprotocol.so
/usr/bin/ld: ../../../../mongo-c-driver/build/src/libmongoc/libmongoc-static-1.0.a(mongoc-compression.c.o): in function `mongoc_compressor_max_compressed_length':
/home/*/maria/build/mongo-c-driver/src/src/libmongoc/src/mongoc/mongoc-compression.c:45: undefined reference to `snappy_max_compressed_length'
/usr/bin/ld: ../../../../mongo-c-driver/build/src/libmongoc/libmongoc-static-1.0.a(mongoc-compression.c.o): in function `mongoc_uncompress':
/home/*/maria/build/mongo-c-driver/src/src/libmongoc/src/mongoc/mongoc-compression.c:161: undefined reference to `snappy_uncompress'
/usr/bin/ld: ../../../../mongo-c-driver/build/src/libmongoc/libmongoc-static-1.0.a(mongoc-compression.c.o): in function `mongoc_compress':
/home/*/maria/build/mongo-c-driver/src/src/libmongoc/src/mongoc/mongoc-compression.c:240: undefined reference to `snappy_compress'
collect2: error: ld returned 1 exit status
make[2]: *** [server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/build.make:385: server/modules/protocol/NoSQL/libnosqlprotocol.so.1.0.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:5282: server/modules/protocol/NoSQL/CMakeFiles/nosqlprotocol.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

I followed the steps in Quickstart from Building MariaDB MaxScale from Source Code to install it.

git clone https://github.com/mariadb-corporation/MaxScale
mkdir build
cd build
../MaxScale/BUILD/install_build_deps.sh
cmake ../MaxScale -DCMAKE_INSTALL_PREFIX=/usr
make

Some details about the environment:

$ uname -a
Linux * 5.17.0+ #9 SMP Wed Sep 20 22:45:49 CST 2023 aarch64 aarch64 aarch64 GNU/Linux
 
$ dpkg -l | grep snappy
ii  libsnappy-dev:arm64                         1.1.8-1build1                                        arm64        fast compression/decompression library (development files)
ii  libsnappy1v5:arm64                          1.1.8-1build1                                        arm64        fast compression/decompression library



 Comments   
Comment by markus makela [ 2023-09-21 ]

Managed to reproduce this. There's some auto-detection of libraries going on that aren't linked to MaxScale but are linked to the nosqlprotocol.

Comment by markus makela [ 2023-09-21 ]

This can be fixed by adding -DENABLE_SNAPPY=OFF to the CMAKE_ARGS in cmake/BuildMongoCDriver.cmake.

Comment by Xiaotong Niu [ 2023-09-25 ]

I found another way to fix the problem:

Add "snappy" in the target_link_libraries of the MaxScale/server/modules/protocol/NoSQL/CMakeLists.txt and the MaxScale/server/modules/protocol/NoSQL/test/CMakeLists.txt.

I would like to ask why we don’t use this method to make the link successful, but add -DENABLE_SNAPPY=OFF?

I'm new to this, looking forward to your reply.

Comment by markus makela [ 2023-09-25 ]

The snappy dependency isn't needed which is why it's better to disable the linking instead of adding an unnecessary dependency to MaxScale.

Comment by Xiaotong Niu [ 2023-09-25 ]

Thank you very much~

Generated at Thu Feb 08 04:31:02 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.