February 20th, 2019

Костерок

Руки → жопа

Захотелось мне valgrind попользовать. А для этого надо glibc собрать с отладочной информацией.
Ок, сделал, как в гентушном учебнике пишут. И тут:

/usr/bin/cmake -E cmake_link_script CMakeFiles/FITSmanip.dir/link.txt --verbose=1
/usr/bin/cc -fPIC  -O2 -Wextra -Wall -Werror -W -fopenmp  -O2 -Wextra -Wall -Werror -W  -shared -Wl,-soname,libFITSmanip.so.0.0.1 -o libFITSmanip.so.0.0.1 CMakeFiles/FITSmanip.dir/FITSmanip.c.o CMakeFiles/FITSmanip.dir/fileops.c.o CMakeFiles/FITSmanip.dir/fits.c.o -lusefull_macros 
/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: warning: section `.bss' type changed to PROGBITS
/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../lib64/crti.o(_ranges+0x5f5f7472617473): reloc against `*UND*': error 2
/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: final link failed: Nonrepresentable section on output
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

Ну ничего ж себе! Я не ожидал, что это потребует пересборки всего "мира"!!!
В общем, собираю обратно glibc без отладочной информации. Т.к. "мир" на ноутбуке будет пересобираться неделю!!!

Так что, не суждено мне попользоваться отладчиками в разработке. Ну, да ничего: 20 лет ими не пользовался, и сейчас как-нибудь обойдусь...
promo eddy_em august 17, 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
Костерок

Ну вообще лыжи не едут!

Пытаюсь сделать функцию безопасной перезаписи. Ничего подходящего из сисвызовов не увидел (чтобы после того, как сделаешь unlink, вернуть файлу предыдущее имя), поэтому решил сделать файлу link на новое имя, unlink на старое, а если запись в старое имя выдаст ошибку, обратно перелинковать.
И не тут-то было! Пишу:
bool FITS_rewrite(FITS *fits){
    FNAME();
    char *nm = tmpnam(NULL);
    if(!nm){WARN("tmpnam()"); return FALSE;}
    char *fnm = strrchr(nm, '/');
    if(!fnm){WARN("tmpnam()"); return FALSE;}
    ++fnm;
    DBG("make double: %s -> %s", fits->filename, fnm);
    if(link(fits->filename, fnm)){
        WARN("link()");
        return FALSE;
    }
    return TRUE;
}

(все остальное допишу дальше, сначала хочу проверить работу link), и у меня создается символическая ссылка вместо жесткой!
Вот же ядрен батон!!! Как это?
UPD: точно лыжи не едут, спать надо ложиться! Я пытался сделать линк на симлинк! Понятно, что появляется новый симлинк. Все ОК. Надо лечиться.
А потом уже разбираться, как мне сделать аналог команды linkat без дескрипторов...
Upd2. А ведь с перезаписью содержимого файла, открытого по симлинку, не все так просто. Буду искать варианты. Как-то я раньше никогда этим не заморачивался...
  • Tags