[MDEV-29925] Building failure on MacOS since the linker flag --as-needed is not supported Created: 2022-11-01  Updated: 2023-12-07

Status: Stalled
Project: MariaDB Server
Component/s: Compiling, libmariadb
Affects Version/s: 10.6, 10.7, 10.8, 10.9, 10.10, 10.11
Fix Version/s: 10.6, 10.11, 11.0

Type: Bug Priority: Major
Reporter: Dmitry Shulga Assignee: Georg Richter
Resolution: Unresolved Votes: 0
Labels: None

Issue Links:
Duplicate
is duplicated by MDEV-29973 BUILD: libmariadb/plugins/auth/ have_... Closed
Relates
relates to MDEV-23887 build failure on MacOS Closed
relates to MDEV-30131 Policy CMP0048 is not set warning dur... Open

 Description   

Building server version 10.6 and up results in linking error

ld: unknown option: --as-needed
clang: error: linker command failed with exit code 1 (use -v to see invocation)



 Comments   
Comment by Daniel Black [ 2022-11-05 ]

I also had this in the gssapi client plugin on the aix build (workaround)

And this (gcc-10.3.0) was despite the successful cmake configure test:

mdborg@p8-aix1-mariadb:[/home/mdborg/build-mariadb-server-10.8]cmake -Uhave_C__Wl___as_needed -Uhave_CXX__Wl___as_needed .
CMake Warning (dev) at CMakeLists.txt:30 (PROJECT):
  Policy CMP0048 is not set: project() command manages VERSION variables.
  Run "cmake --help-policy CMP0048" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
 
  The following variable(s) would be set to empty:
 
    CMAKE_PROJECT_VERSION
    CMAKE_PROJECT_VERSION_MAJOR
    CMAKE_PROJECT_VERSION_MINOR
    CMAKE_PROJECT_VERSION_PATCH
This warning is for project developers.  Use -Wno-dev to suppress it.
 
-- Running cmake version 3.16.0
-- MariaDB 10.8.6
-- Updating submodules
getconf: specified variable is not valid on this system
-- Wsrep-lib version: 1.0.0
== Configuring MariaDB Connector/C
-- Could NOT find ZSTD (missing: ZSTD_LIBRARIES ZSTD_INCLUDE_DIRS) 
-- Performing Test have_C__Wl___as_needed
-- Performing Test have_C__Wl___as_needed - Success
-- SYSTEM_LIBS: -lld;m;-lld;m;/usr/lib/libssl.a;/usr/lib/libcrypto.a;/usr/lib/libz.a
-- Mroonga doesn't support on big-endian
-- Performing Test have_CXX__Wl___as_needed
-- Performing Test have_CXX__Wl___as_needed - Failed
-- Could NOT find BZip2 (missing: BZIP2_INCLUDE_DIR) 
-- Could NOT find LZO (missing: LZO_LIBRARIES LZO_INCLUDE_DIRS) 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mdborg/build-mariadb-server-10.8
mdborg@p8-aix1-mariadb:[/home/mdborg/build-mariadb-server-10.8]make VERBOSE=1 auth_gssapi_client
/opt/freeware/bin/cmake -S/home/mdborg/mariadb-server-10.8 -B/home/mdborg/build-mariadb-server-10.8 --check-build-system CMakeFiles/Makefile.cmake 0
make -f CMakeFiles/Makefile2 auth_gssapi_client
make[1]: Entering directory '/home/mdborg/build-mariadb-server-10.8'
/opt/freeware/bin/cmake -S/home/mdborg/mariadb-server-10.8 -B/home/mdborg/build-mariadb-server-10.8 --check-build-system CMakeFiles/Makefile.cmake 0
/opt/freeware/bin/cmake -E cmake_progress_start /home/mdborg/build-mariadb-server-10.8/CMakeFiles 1
make -f CMakeFiles/Makefile2 libmariadb/CMakeFiles/auth_gssapi_client.dir/all
make[2]: Entering directory '/home/mdborg/build-mariadb-server-10.8'
make -f libmariadb/CMakeFiles/auth_gssapi_client.dir/build.make libmariadb/CMakeFiles/auth_gssapi_client.dir/depend
make[3]: Entering directory '/home/mdborg/build-mariadb-server-10.8'
cd /home/mdborg/build-mariadb-server-10.8 && /opt/freeware/bin/cmake -E cmake_depends "Unix Makefiles" /home/mdborg/mariadb-server-10.8 /home/mdborg/mariadb-server-10.8/libmariadb /home/mdborg/build-mariadb-server-10.8 /home/mdborg/build-mariadb-server-10.8/libmariadb /home/mdborg/build-mariadb-server-10.8/libmariadb/CMakeFiles/auth_gssapi_client.dir/DependInfo.cmake --color=
Deleting primary custom command output "/home/mdborg/build-mariadb-server-10.8/libmariadb/auth_gssapi_client.so" because another output "/home/mdborg/build-mariadb-server-10.8/libmariadb/auth_gssapi_client" does not exist.
make[3]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
make -f libmariadb/CMakeFiles/auth_gssapi_client.dir/build.make libmariadb/CMakeFiles/auth_gssapi_client.dir/build
make[3]: Entering directory '/home/mdborg/build-mariadb-server-10.8'
[  0%] Linking C shared module auth_gssapi_client
cd /home/mdborg/build-mariadb-server-10.8/libmariadb && /opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/auth_gssapi_client.dir/link.txt --verbose=1
"/opt/freeware/share/cmake-3.16/Modules/Platform/AIX/ExportImportList" -o CMakeFiles/auth_gssapi_client.dir/objects.exp CMakeFiles/auth_gssapi_client.dir/plugins/auth/auth_gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_errmsg.c.o
/opt/freeware/bin/gcc-10 -fPIC -Wl,-bE:CMakeFiles/auth_gssapi_client.dir/objects.exp  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Wunused -Wlogical-op -Wno-uninitialized -Wall -Wextra -Wformat-security -Wno-init-self -Wwrite-strings -Wshift-count-overflow -Wdeclaration-after-statement -Wno-undef -Wno-unknown-pragmas -O2 -g -DNDEBUG -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -DDBUG_OFF -Wall -Wdeclaration-after-statement -Wenum-compare -Wenum-conversion -Wextra -Wmissing-braces -Wno-format-truncation -Wno-init-self -Wno-nonnull-compare -Wno-unused-parameter -Wvla -Wwrite-strings -DDBUG_OFF -Wl,--as-needed -shared -Wl,-bnoipath -o auth_gssapi_client.so CMakeFiles/auth_gssapi_client.dir/plugins/auth/auth_gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_errmsg.c.o  -Wl,-blibpath:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/10:/opt/freeware/lib:/usr/lib:/lib -lpthreads -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err 
ld: 0706-012 The -- flag is not recognized.
ld: 0706-012 The -a flag is not recognized.
ld: 0706-012 The -- flag is not recognized.
ld: 0706-027 The -n flag is ignored.
collect2: error: ld returned 255 exit status
make[3]: *** [libmariadb/CMakeFiles/auth_gssapi_client.dir/build.make:114: libmariadb/auth_gssapi_client.so] Error 1
make[3]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
make[2]: *** [CMakeFiles/Makefile2:2755: libmariadb/CMakeFiles/auth_gssapi_client.dir/all] Error 2
make[2]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
make[1]: *** [CMakeFiles/Makefile2:2762: libmariadb/CMakeFiles/auth_gssapi_client.dir/rule] Error 2
make[1]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
make: *** [Makefile:422: auth_gssapi_client] Error 2

CMakeFiles/CMakeOutput.log

Performing C SOURCE FILE Test have_C__Wl___as_needed succeeded with the following output:
Change Dir: /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp
 
Run Build Command(s):/opt/freeware/bin/gmake cmTC_40c3a/fast && /opt/freeware/bin/gmake -f CMakeFiles/cmTC_40c3a.dir/build.make CMakeFiles/cmTC_40c3a.dir/build
gmake[1]: Entering directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_40c3a.dir/src.c.o
/opt/freeware/bin/gcc-10  -I/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp/pthread.h  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Wunused -Wlogical-op -Wno-uninitialized -Wall -Wextra -Wformat-security -Wno-init-self -Wwrite-strings -Wshift-count-overflow -Wdeclaration-after-statement -Wno-undef -Wno-unknown-pragmas -Dhave_C__Wl___as_needed -I /opt/freeware/include   -Wl,--as-needed -o CMakeFiles/cmTC_40c3a.dir/src.c.o   -c /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_40c3a
/opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/cmTC_40c3a.dir/link.txt --verbose=1
/opt/freeware/bin/gcc-10  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Wunused -Wlogical-op -Wno-uninitialized -Wall -Wextra -Wformat-security -Wno-init-self -Wwrite-strings -Wshift-count-overflow -Wdeclaration-after-statement -Wno-undef -Wno-unknown-pragmas -Dhave_C__Wl___as_needed -I /opt/freeware/include -Wl,-bnoipath   -L/opt/freeware/lib CMakeFiles/cmTC_40c3a.dir/src.c.o  -o cmTC_40c3a  -Wl,-blibpath:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/10:/opt/freeware/lib:/usr/lib:/lib /usr/lib/libz.a -lld -lm 
gmake[1]: Leaving directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
 
 
Source file was:
int main(void) { return 0; }

Happy to test options.

shulga I can only assume this is the same on MacOS because of assigning to Georg.

Comment by Daniel Black [ 2022-11-06 ]

AIX is stuck on cmake-3.16.0. Not sure about MacOS. Brew has later versions, but I'm not sure what's there by default. shulga do you know?

Server fix was: https://github.com/MariaDB/server/blob/10.11/cmake/check_linker_flag.cmake

So a 3.14.0 -> <3.18.0 fix of CMAKE_REQUIRED_LINK_OPTIONS / CHECK_CXX_SOURCE_COMPILES would be appreciated.

Comment by Georg Richter [ 2022-11-07 ]

danblack Could you please check if latest 3.3 branch (Connector/C) works ok on AIX?

Comment by Daniel Black [ 2022-11-08 ]

mdborg@p8-aix1-mariadb:[/home/mdborg/build-mariadb-server-10.8]cmake -Uhave_CXX__Wl___as_needed -Uhave_C__Wl___as_needed .
CMake Warning (dev) at CMakeLists.txt:30 (PROJECT):
  Policy CMP0048 is not set: project() command manages VERSION variables.
  Run "cmake --help-policy CMP0048" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
 
  The following variable(s) would be set to empty:
 
    CMAKE_PROJECT_VERSION
    CMAKE_PROJECT_VERSION_MAJOR
    CMAKE_PROJECT_VERSION_MINOR
    CMAKE_PROJECT_VERSION_PATCH
This warning is for project developers.  Use -Wno-dev to suppress it.
 
-- Running cmake version 3.16.0
-- MariaDB 10.8.6
getconf: specified variable is not valid on this system
-- Wsrep-lib version: 1.0.0
== Configuring MariaDB Connector/C
-- Could NOT find ZSTD (missing: ZSTD_LIBRARIES ZSTD_INCLUDE_DIRS) 
-- SYSTEM_LIBS: -lld;m;-lld;m;/usr/lib/libssl.a;/usr/lib/libcrypto.a;/usr/lib/libz.a
-- Mroonga doesn't support on big-endian
-- Performing Test have_C__Wl___as_needed
-- Performing Test have_C__Wl___as_needed - Failed
-- Performing Test have_CXX__Wl___as_needed
-- Performing Test have_CXX__Wl___as_needed - Failed
-- Could NOT find BZip2 (missing: BZIP2_INCLUDE_DIR) 
-- Could NOT find LZO (missing: LZO_LIBRARIES LZO_INCLUDE_DIRS) 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mdborg/build-mariadb-server-10.8
 
 
mdborg@p8-aix1-mariadb:[/home/mdborg/build-mariadb-server-10.8]cat CMakeFiles/CMakeError.log 
..
Performing C SOURCE FILE Test have_C__Wl___as_needed failed with the following output:
Change Dir: /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp
 
Run Build Command(s):/opt/freeware/bin/gmake cmTC_8a5ca/fast && /opt/freeware/bin/gmake -f CMakeFiles/cmTC_8a5ca.dir/build.make CMakeFiles/cmTC_8a5ca.dir/build
gmake[1]: Entering directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_8a5ca.dir/src.c.o
/opt/freeware/bin/gcc-10   -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Dhave_C__Wl___as_needed -Werror -Wall -Wl,--as-needed   -o CMakeFiles/cmTC_8a5ca.dir/src.c.o   -c /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_8a5ca
/opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8a5ca.dir/link.txt --verbose=1
/opt/freeware/bin/gcc-10  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Dhave_C__Wl___as_needed -Werror -Wall -Wl,--as-needed -Wl,-bnoipath   -L/opt/freeware/lib CMakeFiles/cmTC_8a5ca.dir/src.c.o  -o cmTC_8a5ca  -Wl,-blibpath:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/10:/opt/freeware/lib:/usr/lib:/lib -lpthreads -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err 
ld: 0706-012 The -- flag is not recognized.
ld: 0706-012 The -a flag is not recognized.
ld: 0706-012 The -- flag is not recognized.
ld: 0706-027 The -n flag is ignored.
collect2: error: ld returned 255 exit status
gmake[1]: *** [CMakeFiles/cmTC_8a5ca.dir/build.make:87: cmTC_8a5ca] Error 1
gmake[1]: Leaving directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
gmake: *** [Makefile:121: cmTC_8a5ca/fast] Error 2
 
 
Source file was:
int main(void) { return 0; }
Performing C++ SOURCE FILE Test have_CXX__Wl___as_needed failed with the following output:
Change Dir: /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp
 
Run Build Command(s):/opt/freeware/bin/gmake cmTC_64799/fast && /opt/freeware/bin/gmake -f CMakeFiles/cmTC_64799.dir/build.make CMakeFiles/cmTC_64799.dir/build
gmake[1]: Entering directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_64799.dir/src.cxx.o
/opt/freeware/bin/g++-10    -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Dhave_CXX__Wl___as_needed -Werror -Wall -Wl,--as-needed   -o CMakeFiles/cmTC_64799.dir/src.cxx.o -c /home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp/src.cxx
Linking CXX executable cmTC_64799
/opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/cmTC_64799.dir/link.txt --verbose=1
/opt/freeware/bin/g++-10   -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Dhave_CXX__Wl___as_needed -Werror -Wall -Wl,--as-needed -Wl,-bnoipath   -L/opt/freeware/lib CMakeFiles/cmTC_64799.dir/src.cxx.o  -o cmTC_64799  -Wl,-blibpath:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/10:/opt/freeware/lib:/usr/lib:/lib -lpthreads -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err 
ld: 0706-012 The -- flag is not recognized.
ld: 0706-012 The -a flag is not recognized.
ld: 0706-012 The -- flag is not recognized.
ld: 0706-027 The -n flag is ignored.
collect2: error: ld returned 255 exit status
gmake[1]: *** [CMakeFiles/cmTC_64799.dir/build.make:87: cmTC_64799] Error 1
gmake[1]: Leaving directory '/home/mdborg/build-mariadb-server-10.8/CMakeFiles/CMakeTmp'
gmake: *** [Makefile:121: cmTC_64799/fast] Error 2
 
 
Source file was:
int main(void) { return 0; }
 
mdborg@p8-aix1-mariadb:[/home/mdborg/build-mariadb-server-10.8] make VERBOSE=1 auth_gssapi_client
 
Linking C shared module auth_gssapi_client
cd /home/mdborg/build-mariadb-server-10.8/libmariadb && /opt/freeware/bin/cmake -E cmake_link_script CMakeFiles/auth_gssapi_client.dir/link.txt --verbose=1
"/opt/freeware/share/cmake-3.16/Modules/Platform/AIX/ExportImportList" -o CMakeFiles/auth_gssapi_client.dir/objects.exp CMakeFiles/auth_gssapi_client.dir/plugins/auth/auth_gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_errmsg.c.o
/opt/freeware/bin/gcc-10 -fPIC -Wl,-bE:CMakeFiles/auth_gssapi_client.dir/objects.exp  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -maix64 -pthread -mcmodel=large -pie -fPIC -Wunused -Wlogical-op -Wno-uninitialized -Wall -Wextra -Wformat-security -Wno-init-self -Wwrite-strings -Wshift-count-overflow -Wdeclaration-after-statement -Wno-undef -Wno-unknown-pragmas -O2 -g -DNDEBUG -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -DDBUG_OFF -Wall -Wdeclaration-after-statement -Wenum-compare -Wenum-conversion -Wextra -Wmissing-braces -Wno-format-truncation -Wno-init-self -Wno-nonnull-compare -Wno-unused-parameter -Wvla -Wwrite-strings -DDBUG_OFF  -shared -Wl,-bnoipath -o auth_gssapi_client.so CMakeFiles/auth_gssapi_client.dir/plugins/auth/auth_gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_client.c.o CMakeFiles/auth_gssapi_client.dir/plugins/auth/gssapi_errmsg.c.o  -Wl,-blibpath:/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/10:/opt/freeware/lib:/usr/lib:/lib -lpthreads -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err 
strip -e -X32_64 auth_gssapi_client.so
make[3]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
Built target auth_gssapi_client
make[2]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'
/opt/freeware/bin/cmake -E cmake_progress_start /home/mdborg/build-mariadb-server-10.8/CMakeFiles 0
make[1]: Leaving directory '/home/mdborg/build-mariadb-server-10.8'

Great. All good. Thanks georg

Comment by Roel Van de Paar [ 2022-11-30 ]

For the cmake warning observed (but not discussed) in this (seemingly otherwise unrelated) issue, there is now MDEV-30131

Comment by Daniel Lenski [ 2023-01-17 ]

This was fixed in https://github.com/mariadb-corporation/mariadb-connector-c/commit/44383e3df4896f2d04d9141f640934d3e74e04d7

Generated at Thu Feb 08 10:12:19 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.