LINUX.ORG.RU

Сообщения AMDmi3

 

Линкер, не удалять неиспользуемые классы

Есть программа на C++ в виде статической либы и фронтэнда. У нее есть плагины, которые тоже используют эту либу (но, понятное дело, не линкуются с ней). В либе есть класс, который используется только в плагинах. Проблема в том, при линковке фронтенда этот класс выкидывается (линкер думает, что раз он нигде не используется, то не нужен). Как ему сказать, чтобы он этого не делал?

И заодно - насколько корректен такой подход к плагинам - делать .so, использующее символы, определенные в другом месте? Это будет собираться, скажем, на Windows? Или лучше сделать либу динамической и все (и фронтенд и плагины) линковать с ней?

>>>

AMDmi3
()

Hugin, не получается склеить фотографии

Hugin 0.6.1 никак не получается склеить фотографии. Даже если делать так, как у них в самом простом примере на сайте, с теми же фотками, настройками и контрольными точками - при optimize получаются совершенно бредовые значения - yaw/pitch/roll либо 0 либо 1000.0 либо вообще непойми что, еще часто пишет что view (v) очень маленький и результаты скорее всего неправильные. Во второй вкладке (lens кажется), fov после optimize становится либо отрицательным, либо 1 (даже если в optimize не выбрано оптимизировать v). Кто-нибудь сталкивался? Что за бред?

>>>

AMDmi3
()

Начато тестирование Linux клиента EVE Online

На форуме игры EVE Online (космическая 3D MMORPG) появилось сообщение от разработчиков (компания CCP) с предложением протестировать новые игровые клиенты под Linux и MAC (до сих пор существовал только Windows клиент, который, впрочем, сносно работал под wine). К сожалению, данная возможность доступна только зарегистрированным игрокам.

http://myeve.eve-online.com/ingameboard.asp?a=topic&threadID=574782

AMDmi3
()

64 бита в выражении с unsigned short'ами

Допустим есть такой код:

float op(float a, float p, float q) { return a * p * q; }

a, p, q дробные числа в диапазоне [0, 1]

нужно реализовать то же самое, но с unsigned short, т.е. fixed point:

u_int16_t op(u_int16_t a, u_int16_t p, u_int16_t q) { return a * p * q / (65535UL * 65535UL); }

я думал, что по логике оно должно без проблем скомпилиться в что-то типа:

mov ax, [arg_a] ; ax = a mov dx, [arg_p] ; dx = p imul dx ; dx:ax = a*p xor ecx, ecx mov cx, [arg_q] ; ecx = q imul ecx ; edx:eax = a*p*q idiv 0xfffe0001 ; eax = a*p*q/(65535*65535), edx = остаток ret ; результат в eax

Но op упорно возвращает 0 вместо 65535. Помогает смена типа аргументов на u_int64_t (с u_int32_t тоже возвращает 0).

Должен ли компилятор автоматически расширять операнды до 64 бит? Можно как-то заставить gcc (а в идеале, любой компилятор) юзать эти 64 бита? Или надо явно указывать преобразование в u_int64_t? Думаю, мне будет полезно посмотреть код какого-нибудь alpha blending'а в 16битах, никто не знает библиотеки, реализующей подобное?

AMDmi3
()

поддержка юникодной локали ncurses приложением

Как правильно организовать сабж?

Делаю банальный wgetnstr, при этом при вводе русских букв на терминал помимо них echo'ется мусор. В 8bit локали все нормально. Как побороть? Я вот встречал кое-где упоминания wgetn_wstr, даже man на нее есть, но grep по /usr/include ничего не дает, аналогично grep по strings /usr/lib/libncurses.so.

AMDmi3
()

QT, splitter, относительный размер виджетов

Qt 4.2.2, окно на основе QSplitter. Слева - свой виджет на основе .ui с различнми контролами, справа - QGLWidget. Проблема в том, что не получается никакими средствами заставить виджет с контролами принять по умолчанию минимальный размер.

StretchFactor установлен 0/1, пробовал все что можно - и все комбинации sizePolicy, и вручную вызывал resize - пофик, хоть убейся, но виджет с контролами раза в 1.5 больше чем мог бы быть. При этом, двигая сплиттер, его можно ужать до меньшего размера без проблем.

Что делать?

AMDmi3
()

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