LINUX.ORG.RU

Сообщения Burns

 

cmake & qtcreator. Внезапные проблемы

Форум — Development

Всем добрый день. Ситуацицию упростил до невозможного и не могу понять, что делать дальше. Имеем два участка кода

Первый участок, сборка сторонней библиотеки

add_library( glew STATIC ext/glew-2.0.0/src/glew.c)
target_include_directories(glew PUBLIC ext/glew-2.0.0/include/)

Второй участок, изменение пути сборки основного бинаря

set(EXECUTABLE_OUTPUT_PATH  ${CMAKE_CURRENT_LIST_DIR}/release)

Проблема в QtCreator. Если есть оба участка, то он перестает видеть сторонние хидеры(подчеркивает их, типа не нашел), однако собирает все без проблем.

Стоит убрать первый участок - хидеры появляются. Стоит убрать второй участок - хидеры тоже появляются. Когда они вместе - хидеров нет. А вот почему?

--------------------------------------------------------------

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(some)

add_library( glew STATIC ext/glew-2.0.0/src/glew.c)
target_include_directories(glew PUBLIC ext/glew-2.0.0/include/)

set(EXECUTABLE_OUTPUT_PATH  ${CMAKE_CURRENT_LIST_DIR}/release)

add_executable(some src/main.cpp)
target_include_directories(some PUBLIC glew ext/glm-0.9.8.4/)
target_link_libraries(some LINK_PUBLIC glew)

--------------------------------------------------------------

main.cpp

#include <GL/glew.h>
#include <glm/glm.hpp>

int main( void )
{
    return 0;
}

 

Burns
()

sdl xinit flickering

Форум — Development

ubuntu gnome 14.04. Ставим самописный video_test, быстро меняющий цвет в окне SDL. The all is ok.

Переходим в терминал и останавливаем иксы service gdm stop. Запускаем минимальный x server и в нем тест (xinit video_test)

На экране появляется артефакты которые очень похоже на проблемы с вертикальной синхронизацией. При этом в обоих вариантах: - параметры видеодрайвера одинаковы (если глянуть /sys/module/...) - вертикальная синхронизация выключена (если глянуть xvidtune -show)

Проблемы наблюдаются, что с дефолтным fbcon, что с direct_fb

В какую сторону копать? Я уже начинаю отчаиваться из-за того, что не понимаю, чего ему не хватает. Предложения по локализации момента появления мерцания тоже будут полезными.

 ,

Burns
()

SDL Joystick подключение нового джойстика

Форум — Development

Задача в чем - необходимо корректно обрабатывать отключение и подключение джойстиков в системе. Для работы с джойстиками используется SDL1.2

Программное обеспечение требует пары джойстиков. Соответственно если хотя бы одного нет, то нужно детектировать его подключение. Перебрав все доступное API джойстиков пришел к выводу, что для решения задачи необходима переинициализация всей системы

  SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
  SDL_InitSubSystem(SDL_INIT_JOYSTICK);

Это делаем и все бы здорово, но рассмотрим ситуацию, когда один джойстик подключен, а другой нет.

Фиксируем состояние осей рабочего джойстика, например, в положении (32767,32767), затем срабатывает переинициализация и, до тех пор, пока оси не сдвинутся с места (32767,32767), то функция SDL_JoystickGetAxis() будет выдавать нулевое положение (0, 0).

SDL_JoystickUpdate() после переинициализации не помогает.

В доках пишут - если эта функция SDL_JoystickGetAxis() выдает ноль, то смотри SDL_GetError(). Там все чисто.

Как бы это обойти или что я делаю не так? Мне необходимо истинное положение джойстика после инициализации.

 

Burns
()

fsync

Форум — Development

Команда fsync проталкивает kernel space данные на жесткий диск.

Вопрос, если непосредственно после вызова fsync выключить питание компьютера, то могут ли данные застрять в кэше самого HDD или данная функция гарантирует их проталкивание в том числе и через кэш HDD? Или это как-то зависит от модели HDD?

Вопрос может и нубский и может строка мана должна ответить на мой вопрос

This includes writing through or flushing a disk cache if present. The call blocks until the device reports that the transfer has completed.

но лучше лишний раз перестраховаться, спросив более опытных в данном вопросе людей

 

Burns
()

отдать ядро процессора под управление конкретного потока

Форум — Development

Представим ситуацию — есть поток, тело которого обязано выполняться с высокой частотой (ВЧ поток). И есть параллельный код, естественно крутящийся в других потоках, который, разрастаясь, возможно в будущем начнет ломать тайминги ВЧ потока.

  1. Можно ли как-то указать планировщику, чтобы тот на определенном ядре процессора разрешал крутиться только конкретному потоку/набору потоков?
  2. Достаточно ли выставить высокий приоритет ВЧ? А если параллельно обеспечить дикую загрузку ЦП путем большого количества потоков среднего приоритета, то что будет с ВЧ потоком?

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

 

Burns
()

grub-install не заводится

Форум — Development

Добрый день! Кто шарит, прошу помочь.

Дела такие - есть ubuntu-gnome 14.04-3. Есть компьютер с относительно новым железом. Ставим образ на него, все ок, работает, грузится. Далее появляется желание сделать бэкап.

Для простоты эксперимента образ установлен без swap и все на один раздел (т.е. без отдельных разделов под /home, /boot, etc). В биосе вырублен efi и выставлен legacy. Как в таком случае обычно создается образ - да просто архивируется содержимое раздела жесткого диска с системой. Как он потом обычно устанавливается - создается раздел на жестком, извлекается туда архив, монтируются /dev /proc /sys в извлеченный архив, chroot в извлеченный архив и выполнение grub-install /dev/sda.

Раньше на других машинах такой способ работал, но вот новое железо, и grub говорит, что все установлено успешно, ни одного предупреждения, но при перезагрузке граб не грузится. Почему я решил что не грузится - да просто в конфиге поставил таймаут на 10 сек и меню граба не появляется.

С именем диска, куда ставить загрузчик точно не накосячил, иначе бы не туда образ распаковал.

Вопрос 1. Какие мысли, почему не грузится grub, но с дефолтного установщика ubuntu gnome устанавливается нормально?

Знаю, что можно создать бэкап с помощью dd, но это вообще дедовский метод, для всей операционки его предлагать не стоит.

Есть предположение, что решить данную проблему в ближайшее время не удастся, поэтому придумываю костыли, хочу услышать мнения знающих людей. Костыль придумал вот какой - установить ubuntu gnome на два раздела. первый раздел 100MB под /boot (назовем sda1), а второй под систему / (назовем sda2). После штатной установки ubuntu gnome:

1) архивируем sda2, как и раньше
2) удаляем раздел sda2 с целью, чтобы не мешался в mbr.
3) делаем dd первых 101 МB (это mbr, незанятые 512 байт и 100MB sda1) dd sda -> image.

Как я это планирую устанавливать:

1) dd image -> sda (size101MB) - т.е. вот он мой предполагаемый костыль с загрузчиком
2) создаем sda2 и разархивируем туда операционку (которая без секции boot)
3) прописываем в /etc/fstab корректный uuid sda2. uuid от /boot измениться не должен.
4) прописываем в /boot/grub/grub.cfg параметром ядру корректный uuid sda2 для параметра root.

Вопрос 2. Как думаете, костыль заработает?

 ,

Burns
()

Как сделать уникальные имена классов в библиотеке?

Форум — Development

Всем доброго утра!

Решил разбить проект на библиотеки, ранее с ними не работал и заинтересовался, как правильно создавать уникальные имена классов, чтобы не было конфликтов с внешним кодом.

Встречал две возможности:

1. собственный namespace (a-ля boost::) 2. стандартные префиксы к классам (а-ля cv в OpenCV)

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

 

Burns
()

Поиск инструмента визуализации зависимостей между классами с++

Форум — Development

Не первый раз пытаюсь найти, но ничего не выходит, последняя надежда на вас :)

В общем есть папка с кодом, писавшимся математиком протяженное время. Внутри нее часто одни алгоритмы сменялись другими, некоторые просто устарели и нигде не используются, в общем содержимое папки превратилось в изрядную помойку.

Я хочу навести там порядок. Для начала хочу просто изучить зависимости между классами. Для этого мне нужна программа, которая на вход принимает папку, рекурсивно внутри нее изучает все существующие сущности и в качестве выхлопа выдает в идеале UML.

Можно конечно и самому реализовать данную программу, задача выглядит на первый взгляд не столь сложной, однако с визуализацией придется попотеть и ей заниматься крайне не хочется

Кто какие средства знает на эту тему??

 

Burns
()

Перестал грузиться драйвер для USB-RS после установки setserial

Форум — Linux-hardware

Есть такая железка MOXA UPort 1150. Необходимо использовать ее под линуксом. На офф сайте драйвер не нашел, но нашел на форуме офф сайта.

http://www.moxa.ru/forum/index.php?/topic/478-uport-1110-%D0%BB%D0%B8%D0%BD%D1%83%D0%BA%D1%81-%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80/page__st__80
Драйвер под версию ядра до 3.8. У меня 3.13. На том же форуме нашел патч. Скачал, применил, скомпилил и нормально загрузил модуль.

Читаю далее man по использованию этой железки - пишут выстави режим работы с помощью команды setserial. Ну что тут делать, в репах есть - естественно гружу (из пакетов только один добавился и ничего не удалялось). Далее ребутаюсь и пытаюсь заново загрузить модуль. Модуль не грузится.

[   99.635243] mxu11x0: module verification failed: signature and/or  required key missing - tainting kernel
[   99.635317] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[   99.635338] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  103.575108] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  103.575131] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  104.388126] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  104.388149] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  104.927407] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  104.927430] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  105.371116] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  105.371138] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  105.814800] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  105.814823] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[  209.093516] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[  209.093539] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)
[ 5457.963150] mxu11x0: Unknown symbol usb_serial_deregister_drivers (err 0)
[ 5457.963173] mxu11x0: Unknown symbol usb_serial_register_drivers (err 0)

Пытался пересобрать модуль. Пересобирается, не грузится. Пытался удалить setserial. Один фиг грузиться не хочет. Вот хочу спросить, что именно могло произойти при установке setserial и как все-таки заставить работать этот модуль? Или хотя бы, как откатить назад?

Пробовал прописать пути в файле, в котором он якобы функций не видит и тут файл перестал компилиться. Конечно при большом желании можно пару дней просидеть с этой проблемой и понять, что куда идет, но блин он же до этого работал и я уверен, что причина где-то на поверхности

 ,

Burns
()

Причина конфликта SUDO_ASKPASS и LD_LIBRARY_PATH

Форум — Development

Есть скрипт запуска программы

LD_LIBRARY_PATH+=someLibPath
export LD_LIBRARY_PATH;
./someProj ./someProj.cfg

Все здорово и работает. И тут программе понадобились права администратора. Немного меняем скрипт

LD_LIBRARY_PATH+=someLibPath
export LD_LIBRARY_PATH;
export SUDO_ASKPASS=~/password.sh

echo $LD_LIBRARY_PATH
echo $SUDO_ASKPASS

sudo -A ./someProj ./someProj.cfg

И тут вываливается ошибка при запуске программы, мол библиотек не вижу, будто LD_LIBRARY_PATH подтерли. Но echo перед запуском выводит все норм. Объясните пожалуйста, почему оно так?

 

Burns
()

вернуть бы управление из boost::asio::ip::tcp::acceptor::accept()

Форум — Development

Товарищи, помогите, уже не знаю, что тут можно сделать. Имею TCP соединение и boost::asio для работы с ним. Жду клиента на подключение с помощью метода

boost::asio::ip::tcp::acceptor::accept()
Проблема в том, что при выходе из программы хорошо бы вернуть управление из этой функции. Как это сделать - не знаю. Accept конечно же висит в отдельном потоке и временно сделан костыль в виде
boost::thread::interrupt()
но очень бы хотелось по-человечески с помощью
boost::thread::join()
Для возврата управления у акцептора есть два метода - close() и cancel().

Один и тот же код компилировался под двумя операционными системами.

Под виндой cancel вываливает ошибку, мол не поддерживается этот метод для данного типа сокета, однако close() возвращает управление из accept().

Под линуксом cancel() ошибок не выдает и ничего не делает, а close() выдает bad file descriptor и управление из accept() не возвращается.

Асинхронные сокеты не предлагать. Нужную железяку для тестирования трудно достать, а текущее синхронное соединение уже проверено.

Это баг или существуют другие способы возврата управления из синхронного акцептора под линуксом?

 

Burns
()

псевдогибернация

Форум — Linux-hardware

Пришла в голову такая мысль:

1) выделить блок памяти на HDD под гибернацию (назовем его N);

2) загрузиться в операционку без граф оболочки;

3) записать текущее состояние RAM в блок И и никогда блок N больше не перезаписывать;

4) настроить ОС, чтобы она постоянно грузилась гибернацией из этого блока N;

Вуаля - получено то состояние компа, которое у тебя обычно бывает при загрузке операционки и время загрузки сокращено в ~2 раза. Интересно, может есть готовые решения? И какие могут быть подводные камни?

Burns
()

Не могу загрузить карту высот в физический движок Bullet

Форум — Development

Всем привет. Жизнь столкнула с движком bullet для решения задачи RayCast трехмерных объектов. Так вот. С объектами на поверхности все отлично, однако появилась необходимость решения этой задачи с самой земной поверхностью. Пока она была плоской все хорошо, но я решил ввести карту высот и тут беда. Нашел в Bullet класс btHeightfieldTerrainShape, но у него куча недостатков, из-за которых вам и пишу:

1) Используется HeightMap 256x256. После введения класса fps спрыгнул с 300+ до 20. Вообще использовать класс btHeightfieldTerrainShape разумно или я отсталый и так никто не делает?

2) Сама HeightMap построена верно (рендер проходит норм), но в буллет она не грузится (взаимодействие идет с плоскостью без всякого изменения высоты).

Код загрузки местности в буллет привожу ниже. Он честно взят из демки к движку (в демке он так же после раскрытия дефайна не работал). Что я делаю не так?

int BulletEngineCore::LoadTerrain(HeightMap * hm, float xMin, float zMin, float size)
{
	int upAxis = 1; 
	bool useFloatData = false;
	bool flipQuadEdges = false;

	btHeightfieldTerrainShape* heightFieldShape = new btHeightfieldTerrainShape(hm->Width(), hm->Height(),
		hm->DataUnChar(), hm->GetMaxHeight(), upAxis, useFloatData,	flipQuadEdges);

	btVector3 mmin,mmax;
	heightFieldShape->getAabb(btTransform::getIdentity(), mmin, mmax);

	heightFieldShape->setUseDiamondSubdivision(true);


	btVector3 localScaling(1,1,1);
	localScaling[upAxis] = hm->GetScale();

	btCollisionShape* groundShape = heightFieldShape;
	groundShape->setLocalScaling(localScaling);
	_collisionShapes.push_back(groundShape);

	btTransform startTransform;
	startTransform.setIdentity();
	startTransform.setOrigin(btVector3(xMin, hm->GetMinHeight() * hm->GetScale(), zMin));

	btScalar mass=0.f;
	btVector3 localInertia(0,0,0);

	btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,0, groundShape,localInertia);
	rbInfo.m_startWorldTransform = startTransform;
	btRigidBody* body = new btRigidBody(rbInfo);
	_dynamicsWorld->addRigidBody(body);

	++PhysTexID;
	return PhysTexID - 1;
}

 

Burns
()

запрет чтения, записи флешки

Форум — Development

Вопрос может и тупой, так что сильно не ругайте.

Предыстория. Прикупил недавно флешку отцу, на майские поеду домой, подарю. Хотелось бы как-нибудь ее защитить от утери. Нет, мой папа не растеряша, но мало ли. Оставит на работе в компе во время вызова (работает пожарным), а кто-нибудь сделает ей ноги.

А теперь суть вопроса. Можно ли на уровне самого устройства, а не операционной системы запретить чтение, запись (например, под паролем) для OC Windows? Если да, то как и что по этому поводу можно почитать? В инете натыкаюсь на одних сисадминов да людей со сломанными флешками и ничего по теме не нахожу.

Первое, что пришло в голову, это создать некую прогу, типа трояна, которая будет проверять подключенные устройства и сверять их ID какой-нибудь. И по возможности автоустанавливать ее на все компы, к которым подключается флешка. Но данное решение если и возможно, то выглядит очень некрасиво. Жду ваших советов

 

Burns
()

как сделать красиво?

Форум — Development

Есть функция, создающая строчку меню, в которую передаются название пункта меню, указатель на массив возможных значений и их количество.

videosys::Menu menu(attribute, indentFirstLine); 
std::string param[] = {"Да", "Нет"};
menu.AddEnumSwitch("Некий пункт",param, 2);
Теперь проблема - т.к. мы передаем указатель, то мы должны в месте вызова функции делать массив динамическим, т.е. членом класса, чего сильно не хочется. Использовать контейнер можно, но выглядеть будет очень громоздко всего лишь для вызова одной функции (1 строка будет под его объявление, 2,...,n+1 будут заняты под push_back-и или insert-ы). К сожалению, компилятор старого стандарта не поддерживает инициализацию при объявлении того же вектора. Как лучше обойти данный момент?

PS: в какие теги погружать код на ЛОРе?

 

Burns
()

Нужен совет по выбору API

Форум — Development

Ситуация такая. Имеется программа, работающая на SDL. Необходимо из нее сделать второй вариант, добавив «меню». Как это лучше сделать? Самому рисовать кнопочки и отлавливать положение мыши при нажатии (велосипед), либо прикрутить другую библиотеку, в которой это уже реализовано?

Хотелось попробовать Qt, но там вроде бы понятия черно-белой картинки нет, т.е. любой пиксель занимает 3 байта, хотелось бы не тратить время на конвертирование HD изображения в нужный формат.

С другими API не сталкивался, Посоветуйте, как лучше поступить

Burns
()

icc compiler нужен ли?

Форум — Development

Есть много математических вычислений. Выполняются исключительно на одном intel процесоре. Используются либы openCV, SDL, config++, thread, ipp. Вопрос: будет ли какой прирост производительности, если с gcc перейти на интеловский компилятор? На лоре много подобных тем, но они уже с большим сроком давности и в них все ругаются на несобираемость отдельных библиотек.

 

Burns
()

FPS камеры Video4Linux1

Форум — Development

Интересно ваше мнение, хотя может кто знает ответ :)

Ситуация такая. Работаю с камерой при помощи Video4Linux1. На ней написано, что максимальный fps - 25. (Камера стоит 3к, поэтому о ее говноустройсте речи быть не может)

Измерив время между запросами VIDIOCMCAPTURE и VIDIOCSYNC, получаю в среднем примерно 15 мс (а должно быть 40!).

Это значение колеблется от 1.1мс до 75 (может и больше - тестил всего 10 секунд). Но не важно, среднее время все равно меньше положенного.

Вот а почему так? Для замера времени пользуюсь gettimeofday(). Слышал, у нее погрешности большие, но вроде бы отличить большие и меньшие затраты времени она может. Можно, конечно, влепить слип какой-нибудь, но интересна сама причина такого поведения.

Фактически, количество количество обновляемых кадров экрана в программе, - 50. Или может я не совсем те запросы использую? Есть предположение, что с камеры несколько раз считывается один и тот же кадр. Тогда как проверить, что текущий кадр уже считывался?

PS Все запросы можно посмотреть здесь, лично я нужного не смог найти =(

http://lxr.free-electrons.com/source/include/linux/videodev.h?v=2.6.32

Burns
()

И снова установка boost

Форум — Development

Товарищи, вчера целый день потратил на то, чтобы на две операционки поставить данную библиотеку. С виндой проблем нет, а вот с линуксом появились. Скажите, что я делаю неправильно? Версия 1.51

Открыл офф сайт и по списку пошел

1. Скачал

2. Выполнил ./bootstrap.sh

3. Выполнил ./b2

4. Появившуюся папку stage/libs добавил в перенные среды

Если указывать компилятору путь к каждой библиотеке, то все норм, но это ни разу не хорошо. Что нужно сделать (еще/по-другому), чтобы при компиляции можно было писать, например -lboost_thread или -lboost_system?

Пардон за такой УГ вопрос, но блин, пока проблемы с основами.

Burns
()

sudo: /etc/sudoers is mode 0662, should be 0440

Форум — Development

Как выставить обратно?

chmod a-w sudoers

chmod: changing permissions of `sudoers': Operation not permitted

Команда sudo более не помогает после редактирования этого файла.

sudo chmod a-w sudoers

sudo: /etc/sudoers is mode 0662, should be 0440

Хотелось бы вернуть все назад. Содержимое sudoers: user ALL=NOPASWD:/etc/sudoers

Burns
()

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