交叉编译samba-3.3.14遇到的错误

错误1

checking that the C compiler understands negative enum values... configure: error: in `/home/floyd.peng/wndr4700-db-buildroot.git/build_dir/target-powerpc_eglibc-2.13/samba':

configure: error: cannot run test program while cross compiling

出现该错误,我们的Makefile中有类似这样的语句

(cd $(PKG_BUILD_DIR)/source;./configure --target="$(ARCH)" --host="$(GNU_TARGET_NAME))

我们需要添加一个环境变量samba_cv_CC_NEGATIVE_ENUM_VALUES到configure中

SAMBA_CONF_ENV:=samba_cv_CC_NEGATIVE_ENUM_VALUES=yes 
(cd $(PKG_BUILD_DIR)/source; $(SAMBA_CONF_ENV) ./configure --target="$(ARCH)" --host="$(GNU_TARGET_NAME))

错误2

Linking bin/smbd

/home/floyd.peng/wndr4700-db-buildroot.git/staging_dir/toolchain-powerpc_gcc-4.5.1_eglibc-2.13/lib/gcc/powerpc-openwrt-linux-gnu/4.5.1/http://www.cnblogs.com/http://www.cnblogs.com/powerpc-openwrt-linux-gnu/bin/ld: cannot find -ltalloc

collect2: ld returned 1 exit status

make[3]: *** [bin/smbd] Error 1

解决办法,将$(PKG_BUILD_DIR)/source/bin中的libtalloc.so和libtalloc.a拷贝到交叉编译器中的lib目录下

错误3

mkdir: cannot create directory `///usr/local/samba': Permission denied

Failed to make directory ///usr/local/samba

make[3]: *** [installdirs] Error 1

通过--prefix指定正确的安装路径

./configure --prefix=/usr

错误4

mkdir: cannot create directory `///usr/lib/vfs': Permission denied

Failed to make directory ///usr/lib/vfs

make[3]: *** [installmodules] Error 

解决方法,在Makefile中的compile模块的$(MAKE)中添加

MODULESDIR="$(PKG_INSTALL_DIR)/usr/lib

附,package/samba下的Makefile参考

include $(TOPDIR)/rules.mk



PKG_NAME:=samba

PKG_VERSION:=3.3.14

PKG_RELEASE:=1



PKG_GIT_TREEISH:=samba-v3.3.14-floyd



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

PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install



include $(INCLUDE_DIR)/package.mk



define Package/samba

  SECTION:=net

  CATEGORY:=Network

  TITLE:=SAMBA

  URL:=http://www.samba.org

endef

define Build/Prepare

    test x$(GIT_HOME) != x

    test -d $(GIT_HOME)/samba.git

    (cd $(GIT_HOME)/samba.git; git-cat-file -e $(PKG_GIT_TREEISH))

    (cd $(BUILD_DIR); git-archive --format=tar --prefix=$(PKG_NAME)/ --remote=$(GIT_HOME)/samba.git $(PKG_GIT_TREEISH) | tar -xvf -)

    $(call Build/Patch/Default)

endef



SAMBA_CONF_ENV:=amba_cv_HAVE_GETTIMEOFDAY_TZ=yes \

                samba_cv_USE_SETREUID=yes \

                samba_cv_HAVE_DEVICE_MAJOR_FN=yes \

                samba_cv_HAVE_DEVICE_MINOR_FN=yes \

                samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes \

                samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes \

                samba_cv_HAVE_IFACE_IFCONF=yes \

                samba_cv_HAVE_MMAP=yes \

                samba_cv_HAVE_FCNTL_LOCK=yes \

                samba_cv_HAVE_SECURE_MKSTEMP=yes \

                samba_cv_CC_NEGATIVE_ENUM_VALUES=yes \

                samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes \

                samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes \

                samba_cv_HAVE_KERNEL_SHARE_MODES=yes \

                samba_cv_HAVE_POSIX_CAPABILITIES=yes \

                samba_cv_HAVE_UNSIGNED_CHAR=yes \

                samba_cv_SIZEOF_DEV_T=yes \

                samba_cv_SIZEOF_INO_T=yes \

                samba_cv_have_longlong=yes \

                samba_cv_fpie=no \

                samba_cv_HAVE_LINUX_SPLICE=yes \

                libreplace_cv_HAVE_GETADDRINFO=yes \

                ac_cv_file__proc_sys_kernel_core_pattern=yes



SAMBA_CONF_ARGS:= --prefix=/usr \

          --disable-cups \

                 --disable-static \

              --enable-shared \

              --enable-shared-libs \

              --disable-pie \

              --disable-relro \

              --disable-dnssd \

              --disable-avahi \

              --disable-fam \

              --disable-swat \

              --without-cluster-support \

              --without-cifsupcall \

              --without-ads \

              --without-ldap \

              --with-included-popt \

              --with-included-iniparser \

              --with-aio-support \

              --with-cifsmount \

              --without-winbind \

              --with-readline



define Build/Configure

    (cd $(PKG_BUILD_DIR)/source; $(SAMBA_CONF_ENV) ./configure --target="$(ARCH)" --host="$(GNU_TARGET_NAME)" $(SAMBA_CONF_ARGS))

endef

define Build/Compile

    rm -rf $(PKG_INSTALL_DIR)

    mkdir -p $(PKG_INSTALL_DIR)

    $(MAKE) -C $(PKG_BUILD_DIR)/source \

                $(TARGET_CONFIGURE_OPTS) \

                CROSS="$(TARGET_CROSS)" \

                CFLAGS="$(TARGET_CFLAGS) -I$(DEP_BUILD_DIR)/include -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \

                LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \

                CODEPAGEDIR="/usr/share/samba" \

                all

    (cd $(PKG_BUILD_DIR)/source/bin ; \

                mv -f make_smbcodepage.old make_smbcodepage ; touch make_smbcodepage ; \

                mv -f make_unicodemap.old make_unicodemap ; touch make_unicodemap ; \

        );

    mkdir -p $(PKG_INSTALL_DIR)/usr/share/samba

    mkdir -p $(PKG_INSTALL_DIR)/var/log

    $(MAKE) -C $(PKG_BUILD_DIR)/source \

                BASEDIR="$(PKG_INSTALL_DIR)/usr" \

                BINDIR="$(PKG_INSTALL_DIR)/usr/bin" \

                SBINDIR="$(PKG_INSTALL_DIR)/usr/bin" \

                LIBDIR="$(PKG_INSTALL_DIR)/usr/lib" \

             MODULESDIR="$(PKG_INSTALL_DIR)/usr/lib" \

             LOCALEDIR="$(PKG_INSTALL_DIR)/usr/share/locale" \

                VARDIR="$(PKG_INSTALL_DIR)/var/log/samba" \

                MANDIR="$(PKG_INSTALL_DIR)/usr/share/man" \

                CONFIGDIR="$(PKG_INSTALL_DIR)/etc/samba" \

                PRIVATEDIR="$(PKG_INSTALL_DIR)/etc/samba" \

                SWATDIR="$(PKG_INSTALL_DIR)/usr/swat" \

                LOCKDIR="$(PKG_INSTALL_DIR)/var/run/samba" \

                SAMBABOOK="$(PKG_INSTALL_DIR)/usr/swat/using_samba" \

                CODEPAGEDIR="$(PKG_INSTALL_DIR)/usr/share/samba" \

                install

endef



define Package/samba/install

    install -d -m0755 $(1)/usr/sbin

    install -d -m0755 $(1)/usr/bin

    install -m0755 $(PKG_BUILD_DIR)/source/bin/smbpasswd $(1)/usr/bin/smbpasswd

    install -d -m0755 $(1)/usr/sbin

    install -m0755 $(PKG_BUILD_DIR)/source/bin/smbd $(1)/usr/sbin/smbd

    install -m0755 $(PKG_BUILD_DIR)/source/bin/nmbd $(1)/usr/sbin/nmbd

    install -d -m0755 $(1)/usr/share/samba

    install -d -m0755 $(1)/etc/modules.d

    install -m0755 ./files/50-samba-mod $(1)/etc/modules.d/

endef

$(eval $(call BuildPackage,samba))

你可能感兴趣的:(samba)