最小编译配置选项:
GCC_VARIANT:=minimal
include ../common.mk
GCC_CONFIGURE += \
--with-newlib \
--without-headers \
--enable-languages=c \
--disable-libssp \
--disable-shared \
--disable-threads
初始编译配置选项:
GCC_VARIANT:=initial
include ../common.mk
GCC_CONFIGURE += \
--with-newlib \
--with-sysroot=$(TOOLCHAIN_DIR) \
--enable-languages=c \
--disable-shared \
--disable-threads \
最终编译配置选项:
GCC_VARIANT:=final
include ../common.mk
GCC_CONFIGURE += \
--with-headers=$(TOOLCHAIN_DIR)/include \
--enable-languages=$(TARGET_LANGUAGES) \
--enable-shared \
--enable-threads \
--with-slibdir=$(TOOLCHAIN_DIR)/lib
疑点在于--with-sysroot=$(TOOLCHAIN_DIR)选项。
最小编译用于检出linux头文件,无需搜索头文件和库,所以无需关心sysroot;
初始编译用于编译c库,需要搜索安装的linux头文件(安装在$(TOOLCHAIN_DIR)/include目录下),所以设置sysroot;
最终编译用于编译各种软件包,其配置选项将影响编译其他软件包时的搜索路径,而此处未设置,本人认为有问题。
当在linux平台上编译openwrt时,因为同为linux系统,库和系统函数定义一样(当然可能存在版本差别),在编译时搜索host的头文件和库可能不会出问题(实际是问题被掩盖了),但是当在freebsd平台编译时,因为个别函数定义头文件不同(如有些参数linux定义在alloca.h中,而freebsd定义在stdlib.h中),就会出现找不到头文件(如alloca.h)的错误。
GCC_VARIANT:=minimal
include ../common.mk
GCC_CONFIGURE += \
--with-newlib \
--without-headers \
--enable-languages=c \
--disable-libssp \
--disable-shared \
--disable-threads
初始编译配置选项:
GCC_VARIANT:=initial
include ../common.mk
GCC_CONFIGURE += \
--with-newlib \
--with-sysroot=$(TOOLCHAIN_DIR) \
--enable-languages=c \
--disable-shared \
--disable-threads \
最终编译配置选项:
GCC_VARIANT:=final
include ../common.mk
GCC_CONFIGURE += \
--with-headers=$(TOOLCHAIN_DIR)/include \
--enable-languages=$(TARGET_LANGUAGES) \
--enable-shared \
--enable-threads \
--with-slibdir=$(TOOLCHAIN_DIR)/lib
疑点在于--with-sysroot=$(TOOLCHAIN_DIR)选项。
最小编译用于检出linux头文件,无需搜索头文件和库,所以无需关心sysroot;
初始编译用于编译c库,需要搜索安装的linux头文件(安装在$(TOOLCHAIN_DIR)/include目录下),所以设置sysroot;
最终编译用于编译各种软件包,其配置选项将影响编译其他软件包时的搜索路径,而此处未设置,本人认为有问题。
当在linux平台上编译openwrt时,因为同为linux系统,库和系统函数定义一样(当然可能存在版本差别),在编译时搜索host的头文件和库可能不会出问题(实际是问题被掩盖了),但是当在freebsd平台编译时,因为个别函数定义头文件不同(如有些参数linux定义在alloca.h中,而freebsd定义在stdlib.h中),就会出现找不到头文件(如alloca.h)的错误。
更正:gcc最终编译完成之后调用$(SCRIPT_DIR)/patch-specs.sh "$(TOOLCHAIN_DIR)"对搜索路径等进行了修正,所以不需要加--with-sysroot=$(TOOLCHAIN_DIR)选项。
以上分析尚未实际验证。稍后进行。