Есть программа на C++ в виде статической либы и фронтэнда. У нее есть плагины, которые тоже используют эту либу (но, понятное дело, не линкуются с ней). В либе есть класс, который используется только в плагинах. Проблема в том, при линковке фронтенда этот класс выкидывается (линкер думает, что раз он нигде не используется, то не нужен). Как ему сказать, чтобы он этого не делал?
И заодно - насколько корректен такой подход к плагинам - делать .so, использующее символы, определенные в другом месте? Это будет собираться, скажем, на Windows? Или лучше сделать либу динамической и все (и фронтенд и плагины) линковать с ней?
Hugin 0.6.1 никак не получается склеить фотографии. Даже если делать так, как у них в самом простом примере на сайте, с теми же фотками, настройками и контрольными точками - при optimize получаются совершенно бредовые значения - yaw/pitch/roll либо 0 либо 1000.0 либо вообще непойми что, еще часто пишет что view (v) очень маленький и результаты скорее всего неправильные. Во второй вкладке (lens кажется), fov после optimize становится либо отрицательным, либо 1 (даже если в optimize не выбрано оптимизировать v). Кто-нибудь сталкивался? Что за бред?
На форуме игры EVE Online (космическая 3D MMORPG) появилось сообщение от разработчиков (компания CCP) с предложением протестировать новые игровые клиенты под Linux и MAC (до сих пор существовал только Windows клиент, который, впрочем, сносно работал под wine). К сожалению, данная возможность доступна только зарегистрированным игрокам.
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битах, никто не знает библиотеки, реализующей подобное?
Делаю банальный wgetnstr, при этом при вводе русских букв на терминал помимо них echo'ется мусор. В 8bit локали все нормально. Как побороть? Я вот встречал кое-где упоминания wgetn_wstr, даже man на нее есть, но grep по /usr/include ничего не дает, аналогично grep по strings /usr/lib/libncurses.so.
Qt 4.2.2, окно на основе QSplitter. Слева - свой виджет на основе .ui с различнми контролами, справа - QGLWidget. Проблема в том, что не получается никакими средствами заставить виджет с контролами принять по умолчанию минимальный размер.
StretchFactor установлен 0/1, пробовал все что можно - и все комбинации sizePolicy, и вручную вызывал resize - пофик, хоть убейся, но виджет с контролами раза в 1.5 больше чем мог бы быть. При этом, двигая сплиттер, его можно ужать до меньшего размера без проблем.