LINUX.ORG.RU

Сообщения fk0

 

Использование GCC разных версий при сборке библиотек, C++.

Форум — Development

Имеем ситуацию. Есть «тулкит» образца ~2006г. в составе имеет gcc-3.3.3, gdb-6.5, uclibc и binutils тех же времён... И включает он в себя ряд .so библиотек и программу. А моя задача дополнить это всё своей .so.

И имеем современное готовое ПО в исходниках, на C++, достаточно большого объёма и сложности, чтоб там не было желания что-то менять или отлаживать. Проблема в том, что похоже с gcc-3.3.3 оно не работает — ещё на этапе сборки натыкался на сбои в GCC, но обошёл, но после запуска тоже есть странности. Тем более, что взгляд на багтрекер для gcc-3.3.3 вызывает суицидальные настроения.

Вопрос. Можно ли взять более новую современную версию gcc и попросту пересобрать с теми же настройками (configure имеется ввиду) и начать использовать? Какие контраргументы?

Во-первых практический результат для gcc-4.8.4 (пересобрал gcc и binutils). Есть две программы: одна после этого даже не стартует. Валится в фиг знает где, gdb показывает полную чушь и попорченный стек. Вторая (маленькая, тест) стартует и даже как-то работает. Но gdb не показывает стек (bt) нормально, только пару-тройку функций сверху.

Во-вторых размышления на тему какие могут быть проблемы:

1) несовместимость ABI. Здесь (https://gcc.gnu.org/onlinedocs/libstdc /manual/abi.html) пунктом три приводятся версии libstdc++ для gcc и даны комментарии о несовместимости. В частности, для gcc-3.3.3 должно быть libstdc++.so.5 Практически у программы слинкованной gcc-4.8.4 есть зависимость тоже от libstdc++.so.5 (странно... хотя выше я пишу C++, но стандартная C++ библиотека вообще не используется — всё своё).

2) не знаю что ещё, надеюсь мне тут подскажут.

И, наконец, как быть. Использовать gcc-3.3.6 ? Кажется разумным вариантом. Но в имеющемся ПО дикий фарш из C++ кода и темплейтов, хоть формально всё и c++03, но судя по всему чем-то младше gcc-4.x никогда и не собиралось и не факт, что заработает. Хотелось бы потому gcc-4.x.

Платформа не x86, ежели что. Linux embedded, mips. Ядро и uclibc даны свыше (как и всё остальное), хидеров от ядра нет (uclibc пересобрать тоже сложно, но наверное можно, и вообще хотелось бы — но, насколько я понимая это вообще бессмысленно, ввиду несовместимости разных версий uclibc между собой).

 , , , ,

fk0
()

поломали

Форум — Admin

auth.log:Jan 19 14:28:16 pc sshd[31332]: Accepted keyboard-interactive/pam for root from 103.41.124.101 port 47104 ssh2

auth.log:Jan 19 18:36:32 pc sshd[418]: Accepted keyboard-interactive/pam for root from 148.163.4.178 port 40696 ssh2

537561 612 -rwxr-xr-x 1 root root 618631 Jan 20 01:33 /lib/libgcc.so

915632 612 -rwxr-xr-x 1 root root 618642 Jan 20 00:28 /usr/bin/zlsjlwybks

701174 0 lrwxrwxrwx 1 root root 20 Jan 20 00:28 /etc/rc1.d/S01zlsjlwybks -> ../init.d/zlsjlwybks

701320 0 lrwxrwxrwx 1 root root 20 Jan 20 00:28 /etc/rc3.d/S01zlsjlwybks -> ../init.d/zlsjlwybks

701197 0 lrwxrwxrwx 1 root root 20 Jan 20 00:28 /etc/rc2.d/S01zlsjlwybks -> ../init.d/zlsjlwybks

701453 0 lrwxrwxrwx 1 root root 20 Jan 20 00:28 /etc/rc5.d/S01zlsjlwybks -> ../init.d/zlsjlwybks

701384 0 lrwxrwxrwx 1 root root 20 Jan 20 00:28 /etc/rc4.d/S01zlsjlwybks -> ../init.d/zlsjlwybks

701617 4 -rw-r--r-- 1 root root 764 Jan 20 00:28 /etc/crontab

701002 4 -rwxr-xr-x 1 root root 323 Jan 20 00:28 /etc/init.d/zlsjlwybks

700947 4 -rwxr-xr-x 1 root root 229 Jan 20 00:28 /etc/cron.hourly/cron.sh

# strings libgcc.so

BB2FA36AAA9541F0

103.25.9.228

8.8.8.8

CAk[S

 

fk0
()

IP-адреса NS в DNS и работа неймсерверов.

Форум — Admin

Имеем ситуацию:

$ nslookup -type=NS xxx.ru f.dns.ripn.net. Server: f.dns.ripn.net. Address: 193.232.156.17#53

Non-authoritative answer: *** Can't find xxx.ru: No answer

Authoritative answers can be found from: xxx.ru nameserver = alpha.xxx.ru. xxx.ru nameserver = beta.xxx.ru. alpha.xxx.ru internet address = 1.2.3.4 beta.xxx.ru internet address = 5.6.7.8

И далее nslookup beta.xxx.ru даёт тоже 5.6.7.8, а alpha.xxx.ru переехал и nslookup alpha.xxx.ru даёт 9.10.11.12 теперь (условно).

Т.е. сервера ripn.net отдают неправильный адрес alpha.xxx.ru. По уму ведь неймсервер если хочет зарезолвить yyy.xxx.net, то должен спросить адреса NS у ripn.net, потом зарезолвить IP-адреса этих серверов (alpha.xxx.ru и beta.xxx.ru), потом по ним обращаться — верно? Даже если ripn.net и подсказывет адрес alpha. Или будет по подсказанному адресу обращаться — имеет ли права вообще так делать?

А даже если и будет. Увидит, что alpha не отвечает и должен обращаться к beta. Логично?

Де-факто же имеем ситуацию, что для yyy.xxx.ru записано CNAME=alpha.xxx.ru. И в одной сети местный неймсервер при попытке обратиться к http://yyy.xxx.ru посылает на 1.2.3.4 (не обращаясь к DNS вообще, анализируя только ответ ripn.net). Это нормально???

Как с этим бороться?

 , , ,

fk0
()

смена кодировки stderr и stdout на лету...

Форум — General

Написал такую программу:

#! /bin/sh
iconv=«iconv -s -c -f koi8-r -t utf-8»
((env LC_ALL=ru_RU.KOI8-R stdbuf -oL -eL -i0 /usr/local/bin/glimpseindex -B -M 64 -n -o -s -t -w 1000 -z «$@» 3>&2 2>&1 1>&3 3>&- | stdbuf -i0 -oL -eL $iconv) 3>&2 2>&1 1>&3 3>&- | stdbuf -i0 -oL -eL $iconv) 

Короче, вывод в stdout и/или stderr идёт с дикой задержкой из-за буферизации. Но ведь я её отключил (?) через stdbuf.

Для чего это нужно: glimpse работает с 8-битными кодировками, но не работает с utf-8.

Вдогонку из bash-программирования:

#! /bin/sh
declare -a args
for x in «$@»; do
        args[${#args[@]}]=$(printf «%q» $(echo -nE «$x» | iconv -sc -f utf-8 -t koi8-r))
done
eval env LC_CTYPE=ru_RU.KOI8-R LANG=ru_RU.KOI8-R /usr/local/bin/glimpse -z -L20:20:5 «${args[@]}» | iconv -s -c -f koi8-r -t utf-8

Можно ли это упростить и переписать лучше? И здесь я про stderr забыл... Я знаю есть filterm из пакета konwert, но мне как-то не очевидно, как он будет работать, будь вывод переназначен не в терминал, а в файл (причём stdin и stderr в разные).

Вообще хотелось бы просто заставить glimpse работать на машине с utf-8 кодировкой. С KOI-8 проблем-то нет...

 , , , , konwert

fk0
()

Поиск ближайших точек в многомерном пространстве.

Форум — Development

Дано неупорядоченное множество точек в многомерном пространстве. Для простоты предположим, что на плоскости. Нужно найти точки близкие (на расстоянии меньше заданного) к данной. Как быть?

fk0
()

приём сигнала BREAK через последовательный порт

Форум — Development

Хотелось бы, чтобы по приёму сигнала BREAK (лог. 0 в течении 11 и более битовых периодов) очищались буфера данных (это коллизия на шине — всё начинать сначала, а также программа принимала сигнал SIGINT, например.

Примерно это и обещает документация (man tcsetattr) если установлен BRKINT и сброшены IGNBRK в c_iflag. Но там же указывается — только если последовательный порт является «управляющим терминалом» для процесса. Последнее условие очень мешает.

Что приходит в голову. После открывания порта сохранить свой pid, сделать fork, сделать setsid, переоткрыть (это вообще поможет?) открытый порт без O_NOCTTY... по получении SIGINT делать kill(первый pid, SIGUSR1), например.

Как-то это очень ненормально... не?

Можно, конечно, удовлетвориться 0 вместо BREAK (~IGNBRK и ~BRKINT). Это если данные в ASCII, а если нет? Как быть тогда? 0xFF 0 0 тоже не вариант.

Если данные в ASCII, то 0 вместо BREAK вполне удовлетворяет для приёма. Но нужно прекращать передачу после BREAK. Без сигнала пока весь приёмный буфер считает до 0 — долго. С сигналом ok (быстрей для userspace никак уже), но там же в мане написано input and output queues to be flushed — для input это совершенно не нужно (потеряются данные идущие сразу после BREAK, оно ж не моментально всё делается, и потеряются неповреждённые данные до BREAK). Действительно flushed? Получается разумный компромисс, если ASCII, то ориентироваться только по 0 во входном потоке. А если двоичные данные, то извращаться таки как-то с сигналом. Да проще из /proc/tty/driver/serial о BREAK узнать... Что же это такое, какой неудобный интерфейс.

fk0
()

Пошаговая отладка realtime программ (остановить время).

Форум — Development

Есть, например, программа в которой, например, используется активно clock_gettime(CLOCK_MONOTONIC) и алгоритмы в целом привязаны к реальному времени. На самом деле на микроконтроллере такие программы останавливать можно, останавливая и счётчик времени. Работа конечно не правильная, но для отладки приемлемо. Бывает хочется остановить в gdb и посмотреть переменные, ещё что-то поделать... Брейкпоинты поставить... Проблема понятно в чём. Пока в gdb стоит часы идут. И после continue всё глючит (часы далеко вперёд убежали). Хотелось бы останавливать часы, пока процесс остановлен. Как?

Единственное что приходит в голову: завернуть clock_gettime в свою функцию, которая к результату clock_gettime будет добавлять некую поправку хранимую в переменной clock_offset, например. Вместо continue (в gdb) написать define mycontinue — макрос считывающий текущиее значение clock_gettime, вычитающий значение когда остановились, clock_laststopped, и сохраняющий в clock_offset. Далее, написать для gdb опять же commands... чтоб при остановке сохранял в clock_laststopped текущее значение clock_gettime. Как-то сложно и не до конца определённо.

fk0
()

window manager для touchscreen

Форум — Desktop

Какой window manager лучше подойдёт? И сопутствующее ПО. Нужно менюшку для быстрого запуска нужных программ, виртуальную клавиатуру (хотя, xvkb полностью бы устраивала, если бы умела ЯВЕРТЫ кодировку вместо ЙЦУКЕНГ) и т.п. Для варианта вроде «планшета».

На большом десктопе предпочитаю fvwm без гномов и кед. В принципе тут тоже можно настроить. Но лень. Ещё неудобства touchscreen: все действия возможны только левой кнопкой мыши как бы, трудно ресайзить окна: ткнёшь мимо рамки — будет не резайс, а меню WM. Даблклик неудобно (не насобачился). В кнопку сворачивания окна трудно попасть.

Гном-3, наверное, не стоит... много лишней хреноты, юзабилити же в ней часто не дотягивает до приложений на Xaw 80-х годов.

fk0
()

XrandR, Xinerama, два дисплея.

Форум — Desktop

У меня два монитора. На одном я хочу смотреть компьютер, на другом «телевизор»...

Пробовал xrandr. С ним получается виртуальный размер дисплея такой, чтоб оба монитора влезли в него. Т.е. один 1680x1050, а другой 1920x1080. Итого можно получить (1680+1920)x1080, например, если один слева от другого. И мышкой перетаскивать окна между мониторами. Это удобно, если для работы на двух мониторах. А для того, что я хочу такие неудобства:

1) window manager работает с виртуальным размером и на каждом виртуальном десктопе FvwmPager, например, рисует окна из двух мониторов, что совершенно не нужно, эти окна из телевизора только мешаются.

2) если запускаешь, например, mplayer в «телевизоре», то окна диалога, а через некоторое время и он сам (если -geometry +0+0 не сказать) перемещается в основной экран, что совершенно не нужно.

3) опять же window manager и виртуальные десктопы — у меня их 2x2 и переключение мышью. а с xrandr мышью попадаешь в другой монитор, а не другой десктоп... Пробовал xinerama. То же самое, в принципе. Не понял различий между xinerema и xrandr...

Просто описал разные Screens в xorg.conf, и написал Option «Xinerama» «off». Получил честную двухмониторную конфигурацию, разные X screens по каждый монитор, на каждом свой window manager. В принципе терпимо. Окна с одного монитора не вылазят на втором (это и нужно было). Пункт 3, однако, немножко достаёт: можно долго искать где мышь, а она на соседнем мониторе, ну и с переключением вверх-вниз для виртуальных десктопов трудно (телевизор над монитором). И попробовал так и эдак я понял, что иногда таки было бы удобно перетащить окна между мониторами. Если видео из окна браузера, например. Ибо два фаерфокса запустить — что-то сложное... Но от xrandr сдерживает п.1 и п.2 выше. Хотелось бы перетащить окно — да. Но не хотелось бы ни в коем случае, чтоб они сами не туда попадали, и хотелось бы, чтобы виртуальный размер десктопа соответствовал размеру монитора, а не был шире/выше на размер телевизора.

Может кто что подскажет? Оптимальным выходом был бы способ перетащить целиком (либо туда, либо сюда, а не пол-окна тут, половина там) окна из одного screen в другой. И способ переключения между screens не мышью, а исключительно с клавиатуры, например.

fk0
()

javascript lint?

Форум — Web-development

Что может проверить javascript-программу и найти ошибки (статическая проверка)?

fk0
()

Интерфейс для мобильника и PC с широким экраном.

Форум — Web-development

Потенциально, веб-приложение может использоваться не только на мобильнике (ориентация портретная или альбомная), но и на планшетных пк (ориентация любая, размер по-больше), и на настольном ПК (ориентация альбомная, ширина и высота экрана огромные).

Изначально ориентация на мобильник, поэтому информации на экране мало (чтоб не проматывать есть кнопки для переключения между разными экранами) и в узкую колонку (не специально, но просто так получается).

Как сделать для настрольных ПК? Там ведь обычно другие сайты заставляют разворачивать почти на весь экран. И на каждом экране обычно много лишней ненужной информации, потому в целом кажется, что есть какое-то информационное наполнение. Как типично делают? Отдельная версия — не вариант. Дизайнера нет. Есть только художник.

fk0
()

CSS, хочется странного: правило добавляющее класс элементу

Форум — Web-development

Допустим у меня есть элементы разных классов. Это принципиально, чтоб классы были разные. Но у этих элементов есть и общие свойства. Можно писать class=«разное общее». Дальше понятно как. Но хочется писать class=«classname», а потом в CSS: .classname { properties...; APPEND_CLASS(common) } и .common { common properties...} Понятно, надеюсь, объяснил.

Как это можно сделать?

fk0
()

программа для просмотра изображний.

Форум — Desktop

Какой современной программой для просмотра изображений удобно смотреть, чтоб thumbnails были ? Вспоминается xv и ida, но для этого нужна уже машина времени.

PS: чтоб запускалась из командной строки. Без выбора каталога по полчаса мышью. И чтоб показывала гифы с прозрачностями и анимацией.

fk0
()

фиксированный размер <object style=«position:static; display:inline»>

Форум — Web-development

Хочется иметь object (или другой элемент, но удобнее object) с нормальным положением в документе (т.е. позиция не абсолютная и заданная насильно). И при этом с насильно заданным размером по ширине и высоте. Внутри элемента пусто. Так вот без абсолютного позиционирования или всовывания чего-то (чего угодно вообще) в data атрибут он нехочет растягиваться по ширине/высоте как надо. Я не понимаю почему и поэтому спрашиваю здесь — во-первых почему (где сказано, что без даты не должно растягивать?), во-вторых как сделать?

Например, можно сделать так: <object style=«width:200px; height:200px» data=«data:,»></object>

Растянет до нужного размера. Если есть что-то (хоть пустое место, как здесь) в атрибуте data.

Для чего это надо. Каждый object будет иметь свой класс, который будет задавать соответствующую классу картинку в background-image.

Может по-другому как-то можно сделать? Принципиально, чтоб картинка показывалась для элемента с соответствующим классом (внутри элемента пусто, нужна просто связь класса с картинкой).

fk0
()

Картинки, data-URI, множественное их использование в одном html.

Форум — Web-development

У меня есть картинки, которые много раз используются в разных местах одного html. Беда в том, что я хочу картинки включать с использованием data URI и включать их каждый раз в месте использования получается неэффективно с точки зрения размера, да и технически сложно: картинки хочется включить где-нибудь в конце документа в невидимом div и потом как-то использовать ссылаясь на них (это просто сделать потому что).

Практически я сейчас вынужден делать, например, такую вещь. Вставлять картинки как <img src=«#idxxx» class=«autoimg» attributes> в местах использования и один раз в конце как <img id=«idxxx» src=«data:....»> Потом, после загрузки документа, делать document.getElementsByClass(«autoimg») и для каждой такой картинки вставлять вместо неё ту, что с id=«idxxx», а атрибуты брать из той, где src=«#idxxx», последнюю потом удалять. Но у меня ещё картинки нужны в CSS. Можно такую замену сделать в CSS но уже неудобно. А ведь стили ещё могут быть в атрибутах элементов... совсем неудобно. Картинки в стилях нужны для смены картинки при :hover и :active.

Может это можно сделать как-то иначе? Вообще задача множественного использования какого-либо ресурса в программировании типичная же. А в html как-то неудобно получается, каждый раз заново одно и то же загружать...

Пока писал, подумал — можно загрузить так одну картинку (через data URI) и использовать т.н. CSS-спрайты примерно таким образом: в нужном месте вставляется <object id=«name»></object> и для него пишется стиль (хоть в атрибутах, хоть в <style>), что у него background-image: url(image.png) ... И тут образуется ещё один лишний файл. Неудобно, не будем развивать holywar почему.

Можно data URI применить так: в CSS делаются отдельные классы, для которых пишется background-image: url(data:...), и применить в зависимости от нужных картинок классы к нужным элементам. Вроде, это хорошее решение.

Может кто подскажет что-то ещё?

Eщё хотел спросить вдогонку. Мне в html нужно включить (опять же, не отдельным файлом) SVG или ещё что-нибудь такое. Проблема в том, что браузер пытается его отображать сразу. А отображать мне не нужно. Мне для использования в стилях, например (через url(#id), здесь, в отличии от картинок, по id можно почему-то, а картинки требуют только файла). И в неотображаемый div положить нельзя — не будет работать. Приходится делать position fixed, вне экрана и в нижнем слое, например. Как включать «неотображаемые» элементы в html? Понятно, что после загрузки на javascript там что угодно сделать можно. Но хочется меньше программировать то, что можно не программировать.

fk0
()

CSS transition сразу после появления объекта.

Форум — Web-development

Допустим есть какой-то объект, div например. Он изначально невидимый. Как сделано не важно, то ли display=none, то ли убран в самый нижний слой, то ли аттрибут hidden, то ли ещё чего. И хочется сделать такую штуку, чтоб он появился резко, и тут же, через css transition эффект плавно уменьшился, например, с scale(1.2) до scale(1.0) Т.е. появился большой сразу и потом за секунду плавно уменьшился.

Получается, это сделать нельзя. Почему: допустим какая-то javascript функция делает его display=block (scale у него изначально 1.2) и делает scale=1.0. Отрисовку браузер начнёт после завершения функции. А в этот момент scale уже 1.0, вот он так сразу и нарисуется.

Можно сделать вначале display=block, потом некий Yield() (например, продолжить функцию через 0.5 сек таймер), потом только scale=1.0. Тогда будет плавно.

Как ещё можно сделать такую штуку?

fk0
()

Сделать через CSS div более тёмным — как?

Форум — Web-development

Можно через filter, но оно в фаерфоксе не будет, только в chrome. Наложить поверх ещё один чёрный div с 50% прозрачностью?

А если хочется, чтоб в том div, который снизу, который затемняли, чтоб в нём ещё кнопки нажимались после такого затемнения — тогда как?

fk0
()

Насколько хорошо использование <object> в <form> вместо <output> ?

Форум — Web-development

В продолжение данной темы: javascript, forms и т.п. (комментарий)

Т.е. для старых браузеров можно вместо output просто использовать object и всё точно также (кроме некоторых атрибутов). И вместо value просто присваивать textContent. Чем такой метод плох? Ведь он в простых случаях исключает необходимость иметь какую-то template system (она, остаётся, нужна только в основном для вывода списков и сложных/активных элементов интерфейса).

fk0
()

Наложить один html элементповерх другого.

Форум — Web-development

Как проще наложить один html-элемент ровно поверх-другого? При условии, что второй имеет *.style.position=static.

fk0
()

отслеживание изменения свойств объекта (javascript)

Форум — Web-development

Как выполнить функцию при изменении определённого свойства определённого объекта? В Gecko есть такая возможность (watch). В chrome и др — нет?

fk0
()

RSS подписка на новые темы