Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Здравствуйте!

Пытаюсь собрать свой пакет, который будет использовать входящую в состав Entware библиотеку libmodbus.

Успешно установил тулчейн, собрал и запустил "Helloworld" отсюда: https://github.com/zyxmon/zyxel-keenetic-packages/tree/master/package/built/helloworld

Далее пытаюсь запустить свой пакет modsensor, который будет использовать функционал библиотеки libmodbus. Программа собирается, но на роутере не работает, выдавая ошибку

 /opt/bin/sh: modsensor: not found

Ошибка возникает, когда я пытаюсь слинковать исполняемый файл с библиотекой libmodbus. Функции библиотеки пока что даже не используются. Библиотека на роутере установлена, сам файл тоже есть в наличии:

root@Keenetic_Giga:/opt/bin# file modsensor
modsensor: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 3.2.0, stripped

strace выдает следующее:

root@Keenetic_Giga:/opt/bin# strace modsensor
execve("/opt/bin/modsensor", ["modsensor"], 0x7fe7bda0 /* 20 vars */) = -1 ENOENT (No such file or directory)
fstat64(2, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
getpid()                                = 6013
exit_group(1)                           = ?
+++ exited with 1 +++

вывод ldd:

root@Keenetic_Giga:/opt/bin# ldd modsensor
        libmodbus.so.5 => /opt/lib/libmodbus.so.5 (0x77b76000)
        libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x77b50000)
        libc.so.6 => /opt/lib/libc.so.6 (0x779c2000)
        /lib/ld.so.1 => /opt/lib/ld.so.1 (0x77b8f000)

Вроде как и файл есть, и ссылки на библиотеки верные, однако программа не работает. Подозреваю, что ошибка может быть в Makefile.

Makefile для исполняемого файла:

LIBS=-lmodbus

modsensor: modsensor.o
	$(CC) $(LDFLAGS) $(LIBS) modsensor.o -o modsensor

modsensor.o: modsensor.c
	$(CC) $(CFLAGS) -c modsensor.c

clean:
	rm *.o modsensor 

Makefile для пакета:

include $(TOPDIR)/rules.mk

PKG_NAME:=modsensor
PKG_VERSION:=1.0.0
PKG_RELEASE:=1

TARGET_CFLAGS=-I$(STAGING_DIR)/opt/include/modbus
TARGET_LDFLAGS=-L$(STAGING_DIR)/opt/lib
PKG_BUILD_DEPENDS:=libmodbus

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)

include $(INCLUDE_DIR)/package.mk

define Package/$(PKG_NAME)
	SECTION:=utils
	CATEGORY:=Utilities
	DEPENDS:=+libmodbus
	TITLE:=$(PKG_NAME)
	MAINTAINER:=SuperExpert
endef

define Package/$(PKG_NAME)/description
	reading sensor`s values from modbus device.
endef

define Build/Compile
	$(MAKE) -C $(PKG_BUILD_DIR) \
	CFLAGS="$(TARGET_CFLAGS)" \
	LDFLAGS="$(TARGET_LDFLAGS)" \
	$(TARGET_CONFIGURE_OPTS)
endef

CONFIGURE_VARS+=\
	CC="$(TOOLCHAIN_DIR)/bin/$(TARGET_CC)"

define Package/$(PKG_NAME)/install
	$(INSTALL_DIR) $(1)/opt/bin
	$(CP) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/opt/bin
endef

$(eval $(call BuildPackage,$(PKG_NAME))) 

Если убрать линковку с libmodbus, то программа работает.

Помогите составить Makefile с линковкой библиотеки. Возможно, если библиотеку включить непосредственно в программу то все заработает, но хотелось бы разобраться как сделать правильно.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.