Bug #110218 can not link jemalloc or tcmalloc in debian 11.5
Submitted: 27 Feb 2023 6:30 Modified: 1 Mar 2023 3:47
Reporter: alex xing (OCA) Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server: mysqlpump Command-line Client Severity:S3 (Non-critical)
Version:8.0.32 OS:Debian
Assigned to: CPU Architecture:Any

[27 Feb 2023 6:30] alex xing
Description:
can not link jemalloc or tcmalloc in debian 11.5

gcc (Debian 10.2.1-6) 10.2.1 20210110
g++ (Debian 10.2.1-6) 10.2.1 20210110
cmake version 3.18.4
OS: debian 11.5

cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_BOOST=../boost/boost_1_77_0  -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc"  -DFORCE_INSOURCE_BUILD=1 -DCMAKE_INSTALL_PREFIX=mysql  

no -ljemalloc in CMAKE_EXE_LINKER_FLAGS  , the output is:
-- CMAKE_BUILD_TYPE: RelWithDebInfo
-- COMPILE_DEFINITIONS: _GNU_SOURCE;_FILE_OFFSET_BITS=64;RAPIDJSON_NO_SIZETYPEDEFINE;RAPIDJSON_SCHEMA_USE_INTERNALREGEX=0;RAPIDJSON_SCHEMA_USE_STDREGEX=1;BOOST_NO_CXX98_FUNCTION_BASE;HAVE_CONFIG_H;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;_USE_MATH_DEFINES;LZ4_DISABLE_DEPRECATE_WARNINGS;HAVE_TLSv13
-- CMAKE_C_FLAGS: -fno-omit-frame-pointer -ftls-model=initial-exec -g -O2 -ffile-prefix-map=/home/xingying01/innosql-8.0.32/bld_5=. -fstack-protector-strong -Wformat -Werror=format-security   -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Wwrite-strings -Wjump-misses-init -Wstringop-truncation -Wmissing-include-dirs
-- CMAKE_CXX_FLAGS: -std=c++17 -fno-omit-frame-pointer -ftls-model=initial-exec -g -O2 -ffile-prefix-map=/home/xingying01/innosql-8.0.32/bld_5=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Woverloaded-virtual -Wcast-qual -Wimplicit-fallthrough=5 -Wstringop-truncation -Wsuggest-override -Wmissing-include-dirs -Wextra-semi -Wlogical-op
-- CMAKE_CXX_FLAGS_DEBUG: -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -ffunction-sections -fdata-sections -O2 -g -DNDEBUG -g1
-- CMAKE_CXX_FLAGS_RELEASE: -ffunction-sections -fdata-sections -O3 -DNDEBUG
-- CMAKE_CXX_FLAGS_MINSIZEREL: -ffunction-sections -fdata-sections -Os -DNDEBUG
-- CMAKE_C_LINK_FLAGS:
-- CMAKE_CXX_LINK_FLAGS:
-- CMAKE_EXE_LINKER_FLAGS -Wl,-z,relro
-- CMAKE_MODULE_LINKER_FLAGS -Wl,-z,relro
-- CMAKE_SHARED_LINKER_FLAGS -Wl,-z,relro
-- Configuring done
-- Generating done

ldd mysqld, no libjemalloc.so in it:
        linux-vdso.so.1 (0x00007ffe50da9000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f83fdecd000)
        libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f83fde3a000)
        libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f83fdb46000)
        libprotobuf-lite.so.3.19.4 => /home/xingying01/innosql-8.0.32/bld_4/library_output_directory/libprotobuf-lite.so.3.19.4 (0x00007f83fdaa8000)
        libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007f83fdaa3000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f83fda7f000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f83fda79000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f83fd8ac000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f83fd768000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f83fd74e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f83fd579000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f84026ec000)

How to repeat:
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_BOOST=../boost/boost_1_77_0  -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc"  -DFORCE_INSOURCE_BUILD=1 -DCMAKE_INSTALL_PREFIX=mysql 

Suggested fix:
modify CMakeLists.txt
[27 Feb 2023 6:53] alex xing
Category:	MySQL Server: Compiling
not
Category:	MySQL Server: mysqlpump Command-line Client
[28 Feb 2023 14:42] Tor Didriksen
have a look at our cmake options WITH_JEMALLOC and WITH_TCMALLOC

It will add -fno-builtin-malloc etc. to C/CXX flags
and
-ljemalloc or -ltcmalloc to misc. LINKER_FLAGS
[28 Feb 2023 14:44] MySQL Verification Team
Hi Mr. xing,

As you can see for yourself , your report is not a bug.
[1 Mar 2023 3:47] alex xing
So,I've already specified the cmake option  -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc"  , why doesn't it work.
[1 Mar 2023 9:37] Tor Didriksen
I have no idea why your option does not work, try 'CMAKE -DWITH_JEMALLOC=ON'