9

Próbuję skompilować OpenWRT z niestandardowym pakietem, który utworzyłem wewnątrz niego. Oto OpenWRT Makefile dla mojego pakietu:Pakiet nie zawiera zależności dla bibliotek - OpenWRT

# 
# Copyright (C) 2008 OpenWrt.org 
# 
# This is free software, licensed under the GNU General Public License v2. 
# See /LICENSE for more information. 
# 
# $Id$ 

include $(TOPDIR)/rules.mk 

PKG_NAME:=amld 
PKG_RELEASE:=1 

include $(INCLUDE_DIR)/package.mk 

define Package/amld 
SECTION:=utils 
CATEGORY:=Utilities 
TITLE:=amld -- prints a snarky message 
DEPENDS:=+libssl +libcrypto +librt 
endef 

define Build/Prepare 
    mkdir -p $(PKG_BUILD_DIR) 
    $(CP) ./src/* $(PKG_BUILD_DIR)/ 
endef 

define Build/Configure 
endef 

define Build/Compile 
    $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS) 
endef 

define Package/amld/install 
    $(INSTALL_DIR) $(1)/bin 
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/amld $(1)/bin/ 
endef 

$(eval $(call BuildPackage,amld)) 

Kiedy kompilacji pojawia się następujący błąd:

Package amld is missing dependencies for the following libraries: 
libcrypto.so.1.0.0 
librt.so.0 
libssl.so.1.0.0 

jestem pewien, co dodać, czy ktoś ma jakieś pomysły? Dzięki

Edit

Oto mój Makefile dla mojego pakietu:

LDFLAGS=-lssl -lcrypto -lrt 
CFLAGS=-g -I /usr/lib/i386-linux-gnu 

all: amlpkcs12 amld 

amlpkcs12:amlpkcs12.o 
    $(CC) amlpkcs12.o -g -o amlpkcs12 $(LDFLAGS) 

amld: amld.o iot.o bridge.o sysconf.o 
    $(CC) bridge.o iot.o amld.o sysconf.o -g -o amld $(LDFLAGS) 

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

amld.o: amld.c 
    $(CC) $(CFLAGS) -c -g -DVERSION=\"1.0\" amld.c 

sysconf.o: sysconf.c sysconf.h 
    $(CC) $(CFLAGS) -c sysconf.c 

bridge.o:bridge.c bridge.h iot.h 
    $(CC) $(CFLAGS) -c bridge.c 

iot.o: iot.c iot.h 
    $(CC) $(CFLAGS) -c -g iot.c 

clean: 
    rm *.o amlpkcs12 amld 

Aktualizacja

zobaczyć także moje pytanie i odpowiedź here jeśli nadal występują problemy.

+0

Dlaczego potrzebujesz tego '-I/usr/lib/i386-linux-gnu'? AFAIK powinieneś używać tylko nagłówków dostarczonych przez OpenWrt. – yegorich

+0

Wypróbuj 'DEPENDS: = + libopenssl', tak jak pakiet ** openssh **. – yegorich

+0

Próbowałem, że @ yegorich, bez powodzenia: [ – TomSelleck

Odpowiedz

12

końcu dostał, musiał dodać Zmienić

$(eval $(call BuildPackage,amld))

do

$(eval $(call BuildPackage,amld,+libopenssl))

Pełna Makefile:

include $(TOPDIR)/rules.mk 

PKG_NAME:=amld 
PKG_RELEASE:=1 

TARGET_LDFLAGS+=/usr/include/openssl 
PKG_BUILD_DEPENDS:=libopenssl 

include $(INCLUDE_DIR)/package.mk 

define Package/amld 
SECTION:=utils 
DEPENDS:=+libopenssl 
CATEGORY:=Utilities 
TITLE:=amld -- AccessMyLan Daemon 
endef 

define Build/Prepare 
    mkdir -p $(PKG_BUILD_DIR) 
    $(CP) ./files/* $(PKG_BUILD_DIR)/ 
endef 

define Build/Compile 
    $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS) 
endef 

define Package/amld/install 
    $(INSTALL_DIR) $(1)/bin 
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/amld $(1)/bin/ 
endef 

$(eval $(call BuildPackage,amld,+libopenssl)) 
+0

* N.B *: ważną zmianą było użycie poprawnej nazwy biblioteki. Powinien to być 'libopenssl', a nie' libssl' i 'libcrypto'. Umieszczenie zależności w wywołaniu eval BuildPackage lub w bloku Package/amld zadziałałoby, gdyby użyto poprawnej nazwy. – Segfault

0

Proszę sprawdzić OpenWRT\tmp\.config-package.in. Ma drzewo zależności wygenerowane zaraz po rozpoczęciu kompilacji. Może dać pewne wskazówki.