LINUX.ORG.RU

Сегфолт во время динамической линковки

 ,


0

2

Захотелось мне собрать себе ginkgocadx. Получаю такое:

(gdb) run
Starting program: /usr/bin/ginkgocadx 

Program received signal SIGSEGV, Segmentation fault.
0x0000000000005366 in ?? ()
(gdb) bt
#0  0x0000000000005366 in ?? ()
#1  0x00007fffed4bff15 in ?? ()
#2  0x00007ffff7de65b0 in elf_machine_rela (reloc=0x7fffe06acb90, reloc=0x7fffe06acb90, skip_ifunc=<optimized out>, reloc_addr_arg=0x7fffe08c7cc0, 
    version=<optimized out>, sym=<optimized out>, map=0x7ffff7f97a18) at ../sysdeps/x86_64/dl-machine.h:286
#3  elf_dynamic_do_Rela (skip_ifunc=<optimized out>, lazy=<optimized out>, nrelative=<optimized out>, relsize=<optimized out>, reladdr=<optimized out>, 
    map=0x7ffff7f97a18) at do-rel.h:137
#4  _dl_relocate_object (scope=<optimized out>, reloc_mode=<optimized out>, consider_profiling=<optimized out>, consider_profiling@entry=0) at dl-reloc.c:264
#5  0x00007ffff7dddacd in dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2074
#6  0x00007ffff7df1688 in _dl_sysdep_start (start_argptr=start_argptr@entry=0x7fffffffd810, dl_main=dl_main@entry=0x7ffff7ddb820 <dl_main>)
    at ../elf/dl-sysdep.c:249
#7  0x00007ffff7ddee11 in _dl_start_final (arg=0x7fffffffd810) at rtld.c:308
#8  _dl_start (arg=0x7fffffffd810) at rtld.c:414
#9  0x00007ffff7ddac88 in _start () from /lib64/ld-linux-x86-64.so.2
#10 0x0000000000000001 in ?? ()
#11 0x00007fffffffdc37 in ?? ()
#12 0x0000000000000000 in ?? ()

в maps вижу:

7fffed48d000-7fffed590000 r-xp 00000000 08:01 6829229 /lib64/libm-2.21.so

ginkgocadx и glibc собраны с символами. Что происходит и куда копать?


Попробуй убрать -shared если оно там есть

https://answers.launchpad.net/ubuntu/ source/gdb/ question/165290 https://stackoverflow.com/questions/16171540/segmentation-fault-0x00000000000... такая вот хрень гуглится

One of the executables doesn't use libraries and once I removed -shared it worked fine.

I think I found the problem; it was caused by using the same makefile used for building a shared library to compile an executable. It was a silly mistake. I took out -shared option in linking, and it worked fine.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от SZT

Симейк говорит, что линкуется оно так, и никакого -shared нет:

/usr/bin/x86_64-pc-linux-gnu-g++ -fPIC -pthread -Wl,-O1 -Wl,--as-needed CMakeFiles/ginkgocadx.dir/main.cpp.o -o ginkgocadx -L/var/tmp/paludis/media-gfx-ginkgocadx-3.7.1.1573.41/work/srcpkg/ginkgocadx-3.7.1.1573.41/src/../lib/Linux-x86_64/libcurl-7.28.1/lib/release -L/usr/lib64/InsightToolkit -rdynamic ../cadxcore/libCADxCore.a -lpthread -ldl ../visualizator/libvisualizator.a -ldcmdata -ldcmimage -ldcmimgle -ldcmjpeg -ldcmnet -ldcmpstat -ldcmqrdb -ldcmsr -ldcmtls -lijg12 -lijg16 -lijg8 -lofstd -loflog -ldcmdsig -ldcmtls -lwrap ../cadxcore/libCADxCore.a -lcurl -ldcmdata -ldcmimage -ldcmimgle -ldcmjpeg -ldcmnet -ldcmpstat -ldcmqrdb -ldcmsr -ldcmtls -lijg12 -lijg16 -lijg8 -lofstd -lwrap -lsqlite3 -lglib-2.0 -lgobject-2.0 -latk-1.0 -lgio-2.0 -lgthread-2.0 -lgmodule-2.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lpangocairo-1.0 -lpangoft2-1.0 -lpangoxft-1.0 -lgdk-x11-2.0 -lgtk-x11-2.0 -lssl -lcrypto -L/usr/lib64 -pthread -lwx_gtk2u_core-3.0 -lwx_baseu-3.0 -lwx_gtk2u_html-3.0 -lwx_gtk2u_gl-3.0 -lwx_baseu_net-3.0 -lwx_baseu_xml-3.0 -lwx_gtk2u_aui-3.0 -lwx_gtk2u_adv-3.0 -lwx_gtk2u_richtext-3.0 -lwx_gtk2u_xrc-3.0 -lwx_gtk2u_propgrid-3.0 -lvtkCommon -lvtkGraphics -lvtkFiltering -lvtkHybrid -lvtkIO -lvtkRendering -lvtkImaging -lvtkGenericFiltering -lvtkWidgets -lvtkftgl -lvtkVolumeRendering -lvtkexoIIc -lvtkDICOMParser -lITKAlgorithms -lITKNumerics -lITKStatistics -litkNetlibSlatec -lITKFEM -lITKBasicFilters -lITKIO -lITKNrrdIO -litkgdcm -litkjpeg12 -litkjpeg16 -litkopenjpeg -luuid -litkpng -litktiff -litkjpeg8 -lITKSpatialObject -lITKCommon -litkvnl_inst -litkvnl_algo -litkv3p_netlib -litkvnl -litkvcl -litkv3p_lsqr -lm -lpthread -lITKMetaIO -litksys -ldl -lITKDICOMParser -lITKEXPAT -lITKniftiio -lITKznz -lz -lm -lGL -lxml2 -Wl,-rpath,/var/tmp/paludis/media-gfx-ginkgocadx-3.7.1.1573.41/work/srcpkg/ginkgocadx-3.7.1.1573.41/src/../lib/Linux-x86_64/libcurl-7.28.1/lib/release:/usr/lib64/InsightToolkit:

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

Зачем оно с -fPIC собирается? Это библиотека или исполняемый файл? Для библиотеки (.so) как раз потом -shared нужен

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от L29Ah

Я попробовал для интереса запустить .so в gdb и сегфолт выглядит очень похожим на твой

(gdb) run
Starting program: /usr/lib/libr_reg.so 

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()
(gdb) bt
#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffe809 in ?? ()
#2  0x0000000000000000 in ?? ()
(gdb)

SZT ★★★★★
()
Ответ на: комментарий от L29Ah

ld-linux.so.2 это особый .so который как раз можно запускать

SZT ★★★★★
()
Ответ на: комментарий от SZT

Попробовал позапускать хрень из /usr/lib, получаю сегфолты похожие на твой, но непохожие на мой.

L29Ah
() автор топика
Ответ на: комментарий от L29Ah

Ты на последние 3 записи в бектрейсе смотри У меня:

#0  0x0000000000000001 in ?? ()
#1  0x00007fffffffe809 in ?? ()
#2  0x0000000000000000 in ?? ()
У тебя:
#10 0x0000000000000001 in ?? ()
#11 0x00007fffffffdc37 in ?? ()
#12 0x0000000000000000 in ?? ()

По-моему очень похоже. Попробуй этот ginkgocadx без -fPIC собрать

SZT ★★★★★
()
Ответ на: комментарий от SZT

А впрочем я какой-то бред пишу похоже

SZT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.