Статическая компиляция не удалась: динамический символ STT_GNU_IFUNC `tan ‘.. не может быть использован при создании исполняемого файла

Я пытаюсь собрать expect статически на моем ПК, но я, кажется, сталкиваюсь с некоторыми странными ошибками компиляции.

Я смог собрать tcl статически так:

./configure --disable-load --disable-shared

Затем добавьте в make-файл CFLAGS переменная -static ключевое слово. Теперь после компиляции у меня, похоже, есть статический tcl и библиотека:

-rw-rw-r--  1 jlumme jlumme 3284332 loka   2 11:27 libtcl8.6.a

После этого я настраиваю expect:

./configure --with-tclconfig=${TCL_DIR}/unix --disable-shared --disable-load

А потом скомпилировать (сначала динамически):

$ gcc  -pipe -O2 -fomit-frame-pointer -Wall   -Wl,--export-dynamic  -o expect exp_main_exp.o -L/home/jlumme/Downloads/compile/expect5.45 -lexpect5.45 -L/home/jlumme/Downloads/compile/tcl8.6.4/unix -ltcl8.6   -lieee -lm -lpthread -lz

Результат выглядит хорошо:

$ file expect
expect: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=a613c260944117f43bcaebc43c51c421dce273a7, not stripped

Но теперь, если я хочу попробовать статическую компиляцию, я получаю ошибки, которые я не понимаю:

 gcc  -pipe -O2 -fomit-frame-pointer -Wall   -Wl,--export-dynamic  -o expect exp_main_exp.o -L/home/jlumme/Downloads/compile/expect5.45 -lexpect5.45 -L/home/jlumme/Downloads/compile/tcl8.6.4/unix -ltcl8.6   -lieee -lm -lpthread -lz -static/home/jlumme/Downloads/compile/tcl8.6.4/unix/libtcl8.6.a(tclUnixCompat.o):     In function `TclpGetGrGid':
tclUnixCompat.c:(.text+0x41c): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/jlumme/Downloads/compile/tcl8.6.4/unix/libtcl8.6.a(tclUnixCompat.o):     In function `TclpGetGrNam':
tclUnixCompat.c:(.text+0x31c): warning: Using 'getgrnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

<HANDFUL OF WARNINGS REMOVED>

/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `tan' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libm.a(s_tan.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
collect2: error: ld returned 1 exit status

Я действительно не понимаю, в чем заключительная проблема со связыванием, кто-то может помочь?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]