LINUX.ORG.RU
ФорумTalks

libusb & microchip

 , , ,


0

1

Пилю тут проектик с libusb-1.0 и libevent. Работает как-то все странно, глючно. Сразу как переполз на libusb-1.0 из-за необходимости асинхронного апи. И тут при сборке вылезает:

lua: error loading module 'auracore' from file './libauracore.so':
        ./libauracore.so: undefined symbol: libusb_handle_events_timeout_completed

Какого хрена? libusb стоит, хедер на месте, функции задефайнены. strings|grep показывает что символ точно есть. Вот зе фак? Взял в руки ldd, и охренел:

1 ✗ necromant @ sylwer ~/Dev/software/aura $ ldd libauracore.so 
...
        libusb-1.0.so.0 => /usr/local/lib/libusb-1.0.so.0 (0x00007f99852fc000)
...

Но что в /usr/local делает еще один libusb, если я его руками никогда не конпелял?

Ковыряю дальше:

ls -la /usr/local/lib/libusb-1.0.so.0
lrwxrwxrwx 1 root root 17 Sep 10  2013 /usr/local/lib/libusb-1.0.so.0 -> libmchpusb-1.0.so
ls -la /usr/local/lib/libmchpusb-1.0.so 
/usr/local/lib/libmchpusb-1.0.so -> /opt/microchip/mplabcomm1.0/libusb-1.0.so.0.0.0

Оказалось, виной тому MPLABx стоящий в /opt/. Гениальные инженегры микрочипа решили тащить в систему свой libusb с блэкджеком и ***хами. И похрен, что он поломает полсистемы и кучу софта, который ожидает увидеть системный libusb. Нет, ну это даже не смешно уже... Причем их libusb по ходу запаченный вусмерть.

★★★★★

Оказалось, виной тому MPLABx стоящий в /opt/

Вот именно поэтому нельзя ставить софт от рута.

CYB3R ★★★★★ ()

А вообще, микрочип — стрёмная контора, хотя их PIC всегда был очень популярен из-за дешевизны.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

MPLABX тот же, тупо отказывается запускать сетап, если запущен не от рута. И ставил я его с префиксом /opt/ принудительно.

ncrmnt ★★★★★ ()
Ответ на: комментарий от CYB3R

Ты не поверишь, они для pic32 (mips) взяли gcc мипсовый, прикостылили к нему менеджер лицензий и обозвали -Os платной фичей.

ncrmnt ★★★★★ ()

А не совсем понятно, это вопрос или возмущение? :) Если вопрос, как это убрать, то вот вариант: в /etc/ld.so.conf или в каком-то файле в /etc/ld.so.conf.d/ надо убрать /usr/local/lib. Потом, по-моему, надо ldconfig выполнить для обновления кеша.

Тогда либы больше по адресу /usr/local/lib искаться не будут

UPD. Или удалить эти либы из /usr/local/lib руками.

P. S. Но, да, ставить либы в /usr/local - это свинство.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 4)
Ответ на: комментарий от Zubok

Убирается это при помощи rm-а, их софт таки нормально работает с системной либой, но не наоборот. Это так возмущение уровня «Не, ну посмотрите на этих 3.14давриков!»

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Убирается это при помощи rm-а, их софт таки нормально работает с системной либой, но не наоборот. Это так возмущение уровня «Не, ну посмотрите на этих 3.14давриков!»

Форменное свинство. :)

Zubok ★★★★★ ()
Ответ на: комментарий от ncrmnt

А мне вот не понятно. Проге нужно библиотека Х версии какой может не быть в системе, куда она должна ее кидать? В /opt/program_name? А чем плох путь по /usr/local/lib, он же вроде для похожих целей и существует? Или я путаю?

Behem0th ★★★★★ ()
Ответ на: комментарий от Behem0th

В этом случае, слинкуйтесь статически или кладите к себе в зоопарк ее и тяните через LD_LIBRARY_PATH. Нахрен систему запарывать. А если завтра из-за неправильной версии libusb systemd не стартанет?

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от Behem0th

А чем плох путь по /usr/local/lib, он же вроде для похожих целей и существует? Или я путаю?

Не, он не для этого.

FHS

The /usr/local hierarchy is for use by the system administrator when installing software locally. It needs to be safe from being overwritten when the system software is updated. It may be used for programs and data that are shareable amongst a group of hosts, but not found in /usr.

Дело в том, что в большинстве дистров путь /usr/local/lib прописан в /etc/ld.so.conf. Соответсвенно, поиск либы там производится раньше, чем в /usr/lib. Если ты положишь туда какую-то системную библиотеку, то все программы начнут ее использовать. Некоторые пользователи на это нарываются.

Zubok ★★★★★ ()
Ответ на: комментарий от buddhist

Ну, у них есть микроконтроллеры с USB Host за два бакса в розницу. Лично я с ними не работал, ибо контору не люблю, но цена относительно AVR в пять раз меньше.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

Эээ, аттайни2313 стоит меньше бакса на Али, чем не контроллер с УСБ (vusb). Да и стмы есть меньше чем за бакс, а с усб. Я вообще молчу про китайские 8051 с УСБ хайспид

ncrmnt ★★★★★ ()

Тааак... а вот это мне уже не нравится... прошло часов 5 собира проект - опять тоже дерьмо, симлинк стоит на месте, хоть я MPLABX вообще не запускал....

Что-то у меня сейчас жесткое чувство дежавю возникло, как во времена XPSP1 когда один из SVCHOST.exe был троянцем...

ncrmnt ★★★★★ ()
Ответ на: комментарий от CYB3R

Уже снес, судя по всему симлинк создает ldconfig. Это я просто ВНЕЗАПНО кирпичей наложил, когда оно опять вылезло.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Нет, там так просто не получится. Если кратко, то схема такая:

  ---------     ------------      -----
 | USB HID |---| USB  | I2C |----| I2C |
 | device  |   | host | HID |     -----
  ---------     ------------
Где первое — любое USB HID устройство (мышь/клавиатура/джойстик), второе — мой преобразователь USB HID в I2C HID, а третье — компьютер с Linux и драйвером i2c-hid.

CYB3R ★★★★★ ()
Последнее исправление: CYB3R (всего исправлений: 1)

Так вроде бы исходники попросить можно, чтобы узнать, что там запатчено.

Quasar ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.