shtrih-m / fr_drv_ng_examples

Примеры использования https://github.com/shtrih-m/fr_drv_ng
10 stars 2 forks source link

драйвер на Ubuntu #31

Open LysenkoAnastasia opened 2 years ago

LysenkoAnastasia commented 2 years ago

Как установить драйвер на Ubuntu? Скачала https://github.com/shtrih-m/fr_drv_ng/releases/download/1.5.0-43-g45e25ee/fr_drv_ng_linux_aarch64_le_1.5.0-43-g45e25ee.zip. Как происходит сборка? После команды cmake --build .получаю ошибки

aarch64_le/./libclassic_fr_drv_ng.so when searching for -lclassic_fr_drv_ng /usr/bin/ld: cannot find -lclassic_fr_drv_ng collect2: error: ld returned 1 exit status CMakeFiles/classic_interface_example.dir/build.make:94: recipe for target 'classic_interface_example' failed make[2]: [classic_interface_example] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/classic_interface_example.dir/all' failed make[1]: [CMakeFiles/classic_interface_example.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2

swex commented 2 years ago
# в директорию classic_interface копируем файлы и симлинки libclassic_fr_drv_ng*
cd classic_interface
mkdir build
cd build
cmake ..
make

Всё должно собраться. Исполняемый файл по умолчанию ищет libclassic в своей директории:

set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)

поэтому его необходимо положить еще и рядом с classic_interface_example

hacpatb commented 2 years ago

Похожая ситуация, но ответ выше или я не понимаю или он не помог. Скачиваю Release и закидываю в корень к пользователю и перехожу в нее (linux_1.6.0.582\x86_64).

Создаю папку csharp и выполняю команду генерации обертки для C# swig -c++ -csharp -namespace ru.shtrih_m.fr_drv_ng.classic_interface -o csharp/classic_interface_wrap.cxx classic_interface.i Тут вроде все хорошо и ошибок нет

Далее создаю файл CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
add_library(classic_fr_drv_ng_csharp SHARED csharp/classic_interface_wrap.cxx)
set_target_properties(classic_fr_drv_ng_csharp PROPERTIES CXX_VISIBILITY_PRESET default)
target_link_libraries(classic_fr_drv_ng_csharp classic_fr_drv_ng)

и выполняю cmake . Получаю вывод:

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hacpatb/linux_1.6.0.582/x86_64

Вроде бы тоже все хорошо.

Далее пытаюсь cmake --build . И тут уже получаю:

[ 50%] Building CXX object CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o
/home/hacpatb/linux_1.6.0.582/x86_64/csharp/classic_interface_wrap.cxx:317:10: fatal error: classic_interface.h: No such file or directory
 #include <classic_interface.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
CMakeFiles/classic_fr_drv_ng_csharp.dir/build.make:75: recipe for target 'CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o' failed
make[2]: *** [CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/classic_fr_drv_ng_csharp.dir/all' failed
make[1]: *** [CMakeFiles/classic_fr_drv_ng_csharp.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

Куда я только не складывал этот файл, ошибка оставалась. Это я порешал чутка изменив classic_interface_wrap.cxx и дописал полный путь до classic_interface.h. #include </home/hacpatb/linux_1.6.0.582/x86_64/classic_interface.h>

Далее поехали, cmake --build .

[ 50%] Building CXX object CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o
[100%] Linking CXX shared library libclassic_fr_drv_ng_csharp.so
/usr/bin/ld: cannot find -lclassic_fr_drv_ng
collect2: error: ld returned 1 exit status
CMakeFiles/classic_fr_drv_ng_csharp.dir/build.make:96: recipe for target 'libclassic_fr_drv_ng_csharp.so' failed
make[2]: *** [libclassic_fr_drv_ng_csharp.so] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/classic_fr_drv_ng_csharp.dir/all' failed
make[1]: *** [CMakeFiles/classic_fr_drv_ng_csharp.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

Хорошо, и тут я нашел файл link.txt, который находится в /CMakeFiles/classic_fr_drv_ng_csharp.dir и изменил его с /usr/bin/c++ -fPIC -shared -Wl,-soname,libclassic_fr_drv_ng_csharp.so -o libclassic_fr_drv_ng_csharp.so CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o -lclassic_fr_drv_ng на /usr/bin/c++ -fPIC -shared -Wl,-soname,libclassic_fr_drv_ng_csharp.so -o libclassic_fr_drv_ng_csharp.so CMakeFiles/classic_fr_drv_ng_csharp.dir/csharp/classic_interface_wrap.cxx.o -L/home/hacpatb/linux_1.6.0.582/x86_64 -lclassic_fr_drv_ng

И наконец последний cmake --build .

Consolidate compiler generated dependencies of target classic_fr_drv_ng_csharp
[ 50%] Linking CXX shared library libclassic_fr_drv_ng_csharp.so
/usr/bin/ld:/home/hacpatb/linux_1.6.0.582/x86_64/libclassic_fr_drv_ng.so: file format not recognized; treating as linker script
/usr/bin/ld:/home/hacpatb/linux_1.6.0.582/x86_64/libclassic_fr_drv_ng.so:0: syntax error
collect2: error: ld returned 1 exit status
CMakeFiles/classic_fr_drv_ng_csharp.dir/build.make:96: recipe for target 'libclassic_fr_drv_ng_csharp.so' failed
make[2]: *** [libclassic_fr_drv_ng_csharp.so] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/classic_fr_drv_ng_csharp.dir/all' failed
make[1]: *** [CMakeFiles/classic_fr_drv_ng_csharp.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

Дальше я все. Не понимаю что ему не нравится. Куда нужно было складывать файлы, мб что-то писать в CMakeLists.txt. Подскажите пожалуйста где я свернул не туда? )

swex commented 2 years ago

обновлен README.md. поправлена строка вызова swig и пример cmake для библиотеки

swex commented 2 years ago

"На правах рекламы" посмотрите в сторону json-rpc, не нужно будет проходить через вот это вот всё.

hacpatb commented 2 years ago

обновлен README.md. поправлена строка вызова swig и пример cmake для библиотеки

Спасибо. Все собралось без проблем, но только на "настоящей" линухе. На wsl получил ту же самое ошибку что и в конце моего вопроса. Кто захочет на wsl все это проделать - не стоит )

"На правах рекламы" посмотрите в сторону json-rpc, не нужно будет проходить через вот это вот всё.

Сразу же тогда уточню - тип подключения ФР не важен? Можно так же serial://./COM8 или ttyUSB0 указать в ConnectionURI и будет коннект?

swex commented 2 years ago

обновлен README.md. поправлена строка вызова swig и пример cmake для библиотеки

Спасибо. Все собралось без проблем, но только на "настоящей" линухе. На wsl получил ту же самое ошибку что и в конце моего вопроса. Кто захочет на wsl все это проделать - не стоит )

wsl тут мешать не может, ищите что сделали не так на wsl

"На правах рекламы" посмотрите в сторону json-rpc, не нужно будет проходить через вот это вот всё.

Сразу же тогда уточню - тип подключения ФР не важен? Можно так же serial://./COM8 или ttyUSB0 указать в ConnectionURI и будет коннект?

да, это тот же интерфейс со всеми теми же правилами просто RPC, ну и сервер придется держать запускать следить что он жив итд.