交叉编译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))