wolowizard Posted December 16, 2018 Share Posted December 16, 2018 Здравствуйте! Пытаюсь собрать свой пакет, который будет использовать входящую в состав 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 с линковкой библиотеки. Возможно, если библиотеку включить непосредственно в программу то все заработает, но хотелось бы разобраться как сделать правильно. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.