Я пытаюсь скомпилировать mpfr в AIX и получаю сообщение об ошибке при обнаружении поддержки TLS. Моя конечная цель — иметь рабочий gcc (9.3) с поддержкой libstdc++ для потоков и TLS. Я попытался скомпилировать как с существующим gcc на машине (это 8.3 и, как кажется, не имеет поддержки TLS), так и с использованием встроенного xlC (V12.1) на машине. Я скомпилировал GMP-6.2.0:
(gcc attempt): ./configure --enable-shared --enable-static CFLAGS=-fPIC CXXFLAGS=-fPIC --prefix=$OUTDIR --host=powerpc-ibm-aix7.1.0.0
(xlc attempt): ./configure --enable-shared --enable-static CC=xlc CXX=xlc CFLAGS=-qPIC CXXFLAGS=-qPIC --prefix=$OUTDIR --host=powerpc-ibm-aix7.1.0.0
gmake all
gmake check
gmake install
В обоих случаях gmp успешно тестирует и устанавливает. Попытка настроить mpfr-4.0.2 приводит к
(gcc attempt): ./configure --enable-shared --enable-static CFLAGS=-fPIC CXXFLAGS=-fPIC --with-gmp=$OUTDIR --prefix=$OUTDIR --host=powerpc-ibm-aix7.1.0.0
(xlc attempt): ./configure --enable-shared --enable-static CC=xlc CXX=xlc CFLAGS="-qPIC -qtls" CXXFLAGS="-qPIC -qtls" --with-gmp=$OUTDIR --prefix=$OUTDIR --host=powerpc-ibm-aix7.1.0.0
приводит к следующей ошибке в config.log
(gcc attempt):
configure:16567: checking for TLS support
configure:16595: gcc -o conftest -fPIC -I{OUTDIR}/include -I./src -L{OUTDIR}/lib conftest.c >&5
ld: 0711-317 ERROR: Undefined symbol: __tls_get_addr
(xlc attempt):
configure:16567: checking for TLS support
configure:16595: xlc -o conftest -qPIC -qtls -I{OUTDIR}/include -I./src -L{OUTDIR}/lib conftest.c >&5
ld: 0711-317 ERROR: Undefined symbol: .__tls_get_addr
Я пробовал дюжину разных флагов и конфигураций, но в основном я не думаю, что иду в правильном направлении - каждая зависимость кажется круговой. Я считаю, что компиляция с помощью xlc - правильная идея, но я просто не могу понять, как заставить его правильно поддерживать TLS. Я также думал, что могу проигнорировать это и продолжить, а позже снова скомпилировать libstdc++ с поддержкой TLS, но это также завело меня в тупик.
Изменить: выполнение дополнительных действий при использовании xlc: я попытался скомпилировать сгенерированный файл conftest.c (https://gist.github.com/NitzanEgozy/265e54e3353aefc79558c860b543a98f) вручную:
$ xlc -o conftest -qPIC -qtls -I$OUTDIR/include -I./src -L$OUTDIR/lib conftest.c -bnoquiet
(ld): halt 4
(ld): setfflag 4
(ld): savename conftest
(ld): filelist 6 1
(ld): i /lib/crt0.o
(ld): i conftest.o
(ld): lib /usr/vac/lib/libxlopt.a
(ld): lib /usr/vac/lib/libxlipa.a
(ld): lib /usr/vac/lib/libxl.a
(ld): lib /usr/lib/libc.a
LIBRARY: Shared object libc.a[shr.o]: 3301 symbols imported.
LIBRARY: Shared object libc.a[meth.o]: 2 symbols imported.
LIBRARY: Shared object libc.a[posix_aio.o]: 20 symbols imported.
LIBRARY: Shared object libc.a[aio.o]: 18 symbols imported.
LIBRARY: Shared object libc.a[pse.o]: 8 symbols imported.
LIBRARY: Shared object libc.a[dl.o]: 4 symbols imported.
LIBRARY: Shared object libc.a[pty.o]: 1 symbols imported.
LIBRARY: Shared object libc.a[cthread.o]: 25 symbols imported.
FILELIST: Number of previously inserted files processed: 6
(ld): resolve
RESOLVE: 33 of 7029 symbols were kept.
(ld): addgl /usr/lib/glink.o
ADDGL: Glink code added for 2 symbols.
(ld): er full
ld: 0711-318 ERROR: Undefined symbols were found.
The following symbols are in error:
Symbol Inpndx TY CL Source-File(Object-File) OR Import-File{Shared-object}
RLD: Address Section Rld-type Referencing Symbol
----------------------------------------------------------------------------------------------
.__tls_get_addr [30] ER PR conftest.c(conftest.o)
00000010 .text R_RBA [16] .main
Удаление -qtls выдает The '__thread' keyword is not supported on the target platform. The keyword is ignored.