Это первый раз, когда я устанавливаю библиотеку из github в дистрибутиве Linux, я успешно установил ее, но у меня были некоторые сомнения в том, как работают эти великолепные утилиты. Более того, я хотел еще иметь некоторые сомнения относительно того, как заголовки фактически включают библиотеки (статически или динамически). Я успешно установил C библиотеку modbus из источника github:
https://github.com/stephane/libmodbus
В библиотеке также есть набор тестов для использования библиотеки. Файл README указывает запустить команду pkg-config, которая, конечно, позволяет g cc автоматически находить скомпилированную библиотеку.
Кстати, я хотел скомпилировать исходники из тестового каталога, используя просто g cc. После установки и запуска pkg - config у меня есть два следующих пути:
/usr/local/lib/include/modbus
/usr/local/include/modbus
, а файлы modbus.a и modbus.so находятся в каталогах:
/usr/local/lib
/usr/local/lib/lib
Прежде всего, я понятия не имею, связаны ли библиотеки статически или динамически. По ссылке:
https://www.cyberciti.biz/faq/linux-setting-changing-library-path/
объясняется, как использовать утилиту ldconfig для динамического связывания установленных библиотек. Поэтому я просто создал файл lib c .conf, в который я добавил:
/usr/local/include
Когда я запускаю команду, чтобы проверить, было ли она обновлена
ldconfig -v | grep /usr/local/lib
я получаю:
/ sbin / ldconfig.real: невозможно stat / usr / local / lib / x86_64- linux -gnu: нет такого файла или каталога /sbin/ldconfig.real: путь /lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path
/ usr / lib / x86_64- linux -gnu 'передается несколько раз /sbin/ldconfig.real: /lib/x86_64-linux-gnu/ld-2.27.so - это динамический линкер c, игнорирующий
/ usr / local / lib: /sbin/ldconfig.real: /lib32/ld-2.27.so - это динамический компоновщик c, игнорирующий
Далее я запустил:
sudo g cc random-test-client. c
но я получил:
random-test-client.c:15:10: fatal error: modbus.h: No such file or directory
#include <modbus.h>
^~~~~~~~~~
compilation terminated.
То, что я сделал, было также напрямую добавить путь к библиотеке и файлу заголовка:
gcc -Wl,-R/usr/local/lib -I/usr/local/lib/include/modbus -L/usr/local/lib -o myAppName random-test-server -llibapp2
и я получил:
/usr/bin/ld: random-test-server: stderr: invalid version 2 (max 0)
random-test-server: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Наконец я попытался загрузить переменную среды epath для переменной общей библиотеки linux, выполнив:
export LD_LIBRARY_PATH=/usr/local/lib
Но опять-таки команда g cc (в двух версиях) выдала мне те же идентичные ошибки. У меня нет опыта разработки программного обеспечения, но я бы хотел начать. Дело в том, что я знаю, что хочу делать, но все же не знаю, какие инструменты использовать для достижения цели. Я надеюсь, что вы могли бы дать больше информации о том, что я делаю неправильно, и, прежде всего, почему это неправильно.