On AIX 7.1, in a testdir of all of gnulib, I see these link errors, both
with gcc and xlc:

gcc  -Wno-error -g -O2  -L/home/haible/prefix32/lib -o test-c-strtod 
test-c-strtod.o libtests.a ../gllib/libgnu.a libtests.a ../gllib/libgnu.a 
libtests.a  -lm  -lm -lm -lm -lm -lm -lm -lm -lm -lm
ld: 0711-224 WARNING: Duplicate symbol: .rpl_duplocale
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_wait
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_signal
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_broadcast
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_settype
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_once
collect2: error: ld returned 8 exit status
gmake[4]: *** [Makefile:18224: test-c-strtod] Error 1

gcc  -Wno-error -g -O2  -L/home/haible/prefix32/lib -o test-c-strtof 
test-c-strtof.o libtests.a ../gllib/libgnu.a libtests.a ../gllib/libgnu.a 
libtests.a  -lm  -lm -lm -lm -lm -lm -lm -lm -lm -lm
ld: 0711-224 WARNING: Duplicate symbol: .rpl_duplocale
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_wait
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_signal
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_broadcast
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_settype
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_once
collect2: error: ld returned 8 exit status
gmake[4]: *** [Makefile:18236: test-c-strtof] Error 1

gcc  -Wno-error -g -O2  -L/home/haible/prefix32/lib -o test-c-strtold 
test-c-strtold.o libtests.a ../gllib/libgnu.a libtests.a ../gllib/libgnu.a 
libtests.a  -lm  -lm -lm -lm -lm -lm -lm -lm -lm -lm
ld: 0711-224 WARNING: Duplicate symbol: .rpl_duplocale
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_lock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_unlock
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_wait
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_signal
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_broadcast
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutex_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_cond_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_init
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_settype
ld: 0711-317 ERROR: Undefined symbol: .pthread_mutexattr_destroy
ld: 0711-317 ERROR: Undefined symbol: .pthread_once
collect2: error: ld returned 8 exit status
gmake[4]: *** [Makefile:18248: test-c-strtold] Error 1

The cause is that
  - c-strtod.o needs rpl_newlocale, which pulls in localename-unsafe.o.
  - localename-unsafe.o needs glthread_rwlock_*_multithreaded, which pulls in
    lock.o, as well as pthread_mutex_lock, pthread_mutex_unlock (directly).

This patch fixes the link errors.


2024-06-02  Bruno Haible  <br...@clisp.org>

        c-strtod, c-strtof, c-strtold: Fix link error on AIX.
        * lib/c-strtod.c (newlocale): Undefine before use.

diff --git a/lib/c-strtod.c b/lib/c-strtod.c
index 4089ccd79b..ae74a5bd4d 100644
--- a/lib/c-strtod.c
+++ b/lib/c-strtod.c
@@ -47,6 +47,9 @@
 # define STRTOD strtod
 #endif
 
+/* Here we don't need the newlocale override that supports gl_locale_name().  
*/
+#undef newlocale
+
 #if defined LC_ALL_MASK && (HAVE_GOOD_STRTOD_L || HAVE_WORKING_USELOCALE)
 
 /* Cache for the C locale object.




Reply via email to