Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Возможно ли собрать x502api без libusb?Добрый день! Хотим использовать E502 с подключением по Ethernet к МСВС 3.0 с ядром 2.4.32. Есть ли какое-то решение такой задачи без допиливания исходников x502api? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Добрый день. В принципе сделать в CMakeList.txt сборку usb опциональной не сложно, попробую изменить в ближайшее время. А cmake там собрался? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?В репозиторий выложил изменения для x502api, можете скачать через mercurial (hg). Соберется ли и будет ли работать на МСВС не могу сказать, так как понятно не на чем попробовать. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Большое спасибо! |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Получилось собрать. Правда по ходу дела возникли дополнительные проблемы, которые пришлось решать: Нужно еще собрать пример, чтоб было чем проверить работоспособность. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?А первый пункт Вы сделали именно в общем виде проверкой существования функции? через cmake? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Обновленная сейчас версия x502 собирается без изменений? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Добрый день, Алексей!
-W из CMakeLists.txt, -f - из x502libs.cmake, а так же изменил макрос X502_EXPORT в src/x502api.h, т.к. атрибут visibility так же не поддерживается этой версией компилятора. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Вообще можете развернуть МСВС на виртуалке. В торентах видел образ. Сложность еще в том, что МСВС 3.0 было несколько выпусков. Отличаются версиями установленных пакетов. Во всех выпусках ядро 2.4.32. Судя по версиям установленных пакетов, мне достался самый первый выпуск. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?
Ошибся. check_function_exists() нормально отрабатывает. Просто LTIMER_DEFINITIONS надо еще добавить к сборке x502lib. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?И еще последний момент: |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?А pthread_mutex_timedlock при этом принимает struct timespec? т.е. определение структуры есть несмотря на отсутствие clock_gettime? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?timespec объявлена в time.h, timeval - в sys/time.h (точнее структура определяется в bits/time.h, но этот файл включается в sys/time.h). |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Добрый день, Алексей! Еще несколько пожеланий, если можно:
Если исправить на
дублирования не будет. Но исчезнет возможность передавать в подпроекты дополнительные параметры компиляции. Хотя эта возможность сейчас и не используется, на сколько я понял. 2.В МСВС используется кодировка консоли КОИ8-Р, мне пришлось перекодировать исходники, чтоб можно было нормально читать комментарии. Столкнулся с тем, что в двух случаях перекодирование завершается с ошибкой из-за подобных открывающих/закрывающих кавычек:
Это встречается в двух файлах:
После того как я заменил эти кавычки на обычные перекодировка прошла без ошибок. 3.Можно не привязываться к конкретной версии компилятора, а использовать проверку поддержки опций. Я написал такую конструкцию:
Такой же подход можно использовать и для -fvisibility:
|
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Еще добавлю. Перед компиляцией я заменяю виндовый перевод строки в исходниках на Unixовый. В нескольких файлах исходных кодов используется виндовый вариант и сборка завершается ошибкой. Видимо этот древний gcc не понимает CRLF. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Спасибо. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Алексей L Card пишет:
Попытался скомпилировать тест из каталога tests/x502_rdy_cntr_tst. Выяснилось, что в
нет функций:
и
.
начинается только с версии 2.1.91
- 2.4 Для обхода
можно использовать макрос
, а вот для
такой возможности нет. Кроме того не ясно как это повлияет на функционирование библиотек, нужно будет тестировать. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Да, вроде обязательно наличие всех символов только при сборке исполняемой программы, а библиотека соберется и если часть символов не разрешена (надо будет посмотреть, возможно есть флаг линкеру, чтобы выдавал ошибку при этом). А -lpthread пришлось при сборке программы указывать? Правда по идее эти функции не должны быть объявлены и в заголовках, и gcc должен на это выдавать хотя бы предупреждения (а при нужных флагах ошибку), но возможно в Вашей версии gcc еще этого нет. В принципе для mutex'а можно использовать pthread_mutex_lock (тоже ввести макрос), там при корректной работе нигде этот таймаут не должен использоваться, только на случай ошибки в библиотеке. а pthread_cond_timedwait при этом тоже нет (правда event используется только в usb, т.к. мы его отключили он не используется, поэтому если даже этой функции нет, то ошибки на него не будет) |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Да, если не указать флаг линкеру -Wl,--no-undefined, то библиотеки могут собираться с неопределенными символами (в ответе тут например https://stackoverflow.com/questions/418 … -redundant описано зачем это сделано). Думаю добавить его при сборке библиотеки, чтобы выдавались ошибки уже при сборке библиотеки (этот флаг есть в Вашей версии gcc/ld?) Вообще потоки и события используются именно в коде usb, при этом так как libusb уже линкуется с libpthread, то не было ошибок при сборке приложения со штатной библиотекой без явной линковки с libpthread. В остальной части используются только mutex-ы, чтобы приложение могло вызывать функции из разных потоков. При этом явная линковка с libpthread, если приложение не использует потоки, не должна требоваться, т.к. эти символы для mutex дублированы и в glibc и если приложение не будет использовать потоки и явно использовать libpthread, то должны использоваться пустые заглушки из glibc (например тут обсуждается https://stackoverflow.com/questions/111 … -same-apis, включая комментарий Zan Lynx). Можете проверить - если добавить флаг линкера -Wl,--no-undefined (через свойство LINK_FLAGS цели библиотеки), выдаст ли сборка библиотеки ошибки о недостающих символах? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Алексей L Card пишет:
Да, пришлось указывать. Похоже, что в libusb явно указана линковка с pthread, поэтому pthread будет подключен в любом случае. А если libusb нет, то появляется undefined reference. Алексей L Card пишет:
Да, этого флага нет. Это -Werror=implicit-function-declaration, который мы уже убрали. Его нет и в варианте предупреждения: -Wimplicit-function-declaration, что сейчас выглядит довольно странно, т.к. кажется что это базовая проверка. Но видимо 20 лет назад на этот счет было другое мнение. Алексей L Card пишет:
Без libusb видимо не соберется, т.к. все равно остаются еще мьтексы из нее. Вообще планировал с помощью check_library_exists() проверять наличие pthread_mutex_timedlock и pthread_timedjoin_np и выставлять соответствующие дефайны. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Флаг -Wl,--no-undefined похоже есть. По крайней мере CHECK_C_COMPILER_FLAG() его находит. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Если добавлять флаг -Wl,--no-undefined к сборке, то, видимо, нужно и libpthread подключать к библиотекам, иначе ошибка будет всегда. |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?А на какие функции ругается при сборке с -Wl,--no-undefined без libpthread? |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Осталась только pthread_mutex_timedlock(). |
|||
|
||||
|
Re: Возможно ли собрать x502api без libusb?Если его заменить на обычный pthread_mutex_lock, то соберется нормально и без libpthread? |
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск