您的位置:首页 > 运维架构

openwrt barrier_breaker gcc final编译配置选项好像有问题

2014-11-01 19:29 429 查看
最小编译配置选项:

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)选项。

以上分析尚未实际验证。稍后进行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: