Linux библиотека modbus C - Невозможно связать заголовочный файл библиотеки modbus.h без pkg-config. - PullRequest
0 голосов
/ 24 февраля 2020

Это первый раз, когда я устанавливаю библиотеку из 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 (в двух версиях) выдала мне те же идентичные ошибки. У меня нет опыта разработки программного обеспечения, но я бы хотел начать. Дело в том, что я знаю, что хочу делать, но все же не знаю, какие инструменты использовать для достижения цели. Я надеюсь, что вы могли бы дать больше информации о том, что я делаю неправильно, и, прежде всего, почему это неправильно.

...