크로스 컴파일도 하는 동적 링크 라이브러리를 사용하는 OpenWRT 패키지를 작성하려고 합니다. 내가 아는 한, 라이브러리를 .so
파일로 컴파일하는 것은 잘 작동합니다. 컴파일 후에는 find . -name "libname.so"
다음 콘텐츠가 루트 디렉터리에 반환됩니다.
./staging_dir/target-mips_34kc_uClibc-0.9.33.2/root-ar71xx/usr/lib/libname.so
./staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/libname.so
./build_dir/target-mips_34kc_uClibc-0.9.33.2/libname-1.0/ipkg-ar71xx/libname/usr/lib/libname.so
./build_dir/target-mips_34kc_uClibc-0.9.33.2/libname-1.0/libname.so
./build_dir/target-mips_34kc_uClibc-0.9.33.2/root-ar71xx/usr/lib/libname.so
라이브러리를 내 프로젝트에 연결하기 위해 이것을 정확히 어떻게 사용합니까? 내 프로젝트 Makefile에는 다음이 있습니다.
include $(TOPDIR)/rules.mk
PKG_NAME:=blocker
PKG_VERSION:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/blocker
TITLE:=$(PKG_NAME)
SECTION:=util
CATEGORY:=Utilities
DEPENDS:=+libname
endef
TARGET_CFLAGS += -Wall -llibname
define Package/blocker/description
Blocks incomming SSH and HTTP connections
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS)
endef
define Package/blocker/install
$(INSTALL_DIR) $(1)/sbin/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/files/blocker.init $(1)/etc/init.d/blocker
$(INSTALL_DATA) $(PKG_BUILD_DIR)/files/blocker.conf $(1)/etc/config/blocker
$(INSTALL_BIN) $(PKG_BUILD_DIR)/blocker $(1)/sbin/blocker
endef
$(eval $(call BuildPackage,blocker))
그러나 이 패키지를 컴파일하면 오류가 발생합니다.
#include <libname.h> // <-- fatal error: libname.h: No such file or directory
int main(void)
{
return 1;
}
답변1
설치 블록에서 libname librarry를 컴파일한 후 패키지 컴파일 시 헤더를 찾을 수 있도록 libname.h 파일을 ?(1)/usr/lib에 설치합니다.