크로스 컴파일 라이브러리를 사용한 크로스 컴파일 패키지

크로스 컴파일 라이브러리를 사용한 크로스 컴파일 패키지

크로스 컴파일도 하는 동적 링크 라이브러리를 사용하는 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에 설치합니다.

관련 정보