Написал сценарий для сборки. Все просто - в каждом файле <func>.for находится описание функции <func>. Из них делались объектники, после чего все объектники линкуются с основной программой. Все прекрасно компилируется, все прекрасно линкуется. Однако запускаться - не запускается. Мгновенно после запуска программа вылетает, словив SIGSEGV. Вот такая вот беда. Так как я никогда раньше такие проблемы не решал, прошу помочь сообщество разобраться, почему происходит вылет из-за ошибки сегментирования, и как вообще решать такого рода проблемы. Текущий вариант программы 100% компилировался и работал под виндами. Никаких изменений, влияющих на логику, я в сырцы не вносил. Вот все, над чем я пока рассуждаю: (SLC6)freehck@ws00:~/solver3% ldd solver3 linux-gate.so.1 => (0xb77d2000) libm.so.6 => /lib/libm.so.6 (0xb77a3000) libiomp5.so => /opt/intel/Compiler/11.1/080/lib/ia32/libiomp5.so (0xb7708000) libpthread.so.0 => /lib/libpthread.so.0 (0xb76ed000) libc.so.6 => /lib/libc.so.6 (0xb7557000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7538000) libdl.so.2 => /lib/libdl.so.2 (0xb7533000) /lib/ld-linux.so.2 (0xb77d3000) (SLC6)freehck@ws00:~/solver3% strace ./solver3 &> solver3.strace
Attachment:
solver3.strace
Description: Binary data
(SLC6)freehck@ws00:~/solver3/Oblique_shock% ltrace ./solver3 &> solver3.ltrace
Attachment:
solver3.ltrace
Description: Binary data
(SLC6)freehck@ws00:~/solver3% gdb ./solver3 < ... cut ... > (gdb) run Starting program: /home/freehck/solver3/solver3 [Thread debugging using libthread_db enabled] Program received signal SIGSEGV, Segmentation fault. 0x0804a333 in MAIN__ () Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6_3.6.i686 libgcc-4.4.6-4.el6.i686 (gdb) disas MAIN__ Dump of assembler code for function MAIN__: 0x0804a310 <+0>: push %ebx 0x0804a311 <+1>: mov %esp,%ebx 0x0804a313 <+3>: and $0xffffffc0,%esp 0x0804a316 <+6>: push %ebp 0x0804a317 <+7>: push %ebp 0x0804a318 <+8>: mov 0x4(%ebx),%ebp 0x0804a31b <+11>: mov %ebp,0x4(%esp) 0x0804a31f <+15>: mov %esp,%ebp 0x0804a321 <+17>: sub $0x1ac8d038,%esp 0x0804a327 <+23>: mov %edi,-0x2b4(%ebp) 0x0804a32d <+29>: mov %esi,-0x2b8(%ebp) => 0x0804a333 <+35>: push $0x3 0x0804a335 <+37>: call 0x818a450 <__intel_new_proc_init> 0x0804a33a <+42>: stmxcsr -0x1ac8d038(%ebp) 0x0804a341 <+49>: orl $0x8000,-0x1ac8d038(%ebp) 0x0804a34b <+59>: ldmxcsr -0x1ac8d038(%ebp) 0x0804a352 <+66>: add $0x4,%esp 0x0804a355 <+69>: push $0x0 0x0804a357 <+71>: push $0x81df62c 0x0804a35c <+76>: call 0x8049f40 <__kmpc_begin@plt> < ... cut ... > (gdb) bt #0 0x0804a333 in MAIN__ () Cannot access memory at address 0xa536fc84 -------------------- Тема выросла как продолжение мучений с библиотекой IMSL и Intel Fortran. На данный момент в нашем институте разработчик программы уже отвязал ее от IMSL - потому в выводе ldd эти либы не фигурируют. Я так понимаю, что раз вылетает из-за futex, корни проблемы стоит искать в многопоточности, да? -- ************************************** * jabber: freehck@jabber.mipt.ru * * Registered linux user #546240 * **************************************