交叉编译-configure配置
配置configure.ac
用自动生成Makefile的工具来生成Makefile的过程中,需要用autoscan命令来生成configure.scan文件,然后将它改名字为configure.ac或者configure.in,然后就来更改其中的一些相关信息来完成下面需要完成的配置,那么这个configure.ac怎么来写?今天我们就将这个过程分开来和大家共同研究和探讨下。
我们在生成的过程中会用autoconf命令来处理configure.ac/configure.in文件,生成一个configure的脚本。生成后的configure文件是一个可以移植的shell脚本,运行的时候它检查编译环境,来决定哪些库是可以用的,所用到的平台有哪些个特征,那些个头文件和库是已经找到的等等, 然后收集到的这些信息,它修改编译标记,生成一个Makefile文件,同时生成一个包含已定义的预处理符号的config.h文件。configure并不需要运行autoconf,所以我们在发布应用程序之前生成这个文件,如此我们就不必有autoconf的软件包了。
AC_INIT总是configure.in中的第一个宏。它扩展为许多可由其他configure脚本共享的模板文件代码。这些代码解析传到 configure中的命令行参数。这个宏的一个参数是一个文件名,这个文件应该在源代码目录中,它用于健全性检查,以保证configure脚本已正确定位源文件目录。
AM_CONFIG_HEADER指定了要创建的头文件,差不多总是config.h。创建的头文件包含由configure定义的C预处理符号。最低限度应该定义PACKAGE和VERSION符号,这样可以将应用程序名称和版本传送到代码中,而无须对它们硬编码(非公用的源文件应该包含 config.h(#include)以利用这些定义。然而,不要将config.h文件安装到系统中,因为它有可能与其他的软件包冲突)。
AM_INIT_AUTOMAKE初始化automake。传到这个宏里的参数是要编译的应用程序的名称和版本号(这些参数成为config.h中定义的PACKAGE和VERSION值)。
AM_MAINTAINER_MODE关闭缺省时仅供程序维护者使用的makefile目标,并修改以使configure能理解 –enable-maintainer-mode选项。–enable-maintainer-mode将maintaineronly目标重新打开。仅供维护者使用的makefile目标允许最终用户清除自动生成的文件,比如configure,这意味着要修复编译故障,必须安装有autoconf和automake软件。注意,因为autogen.sh脚本主要是给开发人员用的,autogen.sh会自动传递一个–enable- maintainer-mode选项给configure。
AM_ACLOCAL_INCLUDE指定一个附加的目录,用于搜索m4宏。在这里,它指定为macros子目录。在这个目录中应该有Gnome宏的拷贝。
GNOME_INIT给configure添加一个与Gnome相关的命令行参数个数,并为Gnome程序定义一些makefile变量,这些变量中包含了必要的预处理程序和链接程序标志。这些标志是由gnome-config脚本取得的。安装gnome-libs时会安装gnome- config脚本。
AC_PROG_CC定位C编译器。
AC_CHECK_LIB如果程序中加入了多线程用到的锁的话就要加入像 AC_CHECK_LIB([pthread], [main])这样的检测,这个宏的含义如下:
LIBS是link的一个选项,程序中使用了读写锁,所以要测试pthread库中是否存在pthread_rwlock_init函数。
AC_PROG_RANLIB如果是多线程的程序的话要加入这句话,要不运行automake命令时会出错。
AC_ISC_POSIX添加一些在某些平台上实现POSIX兼容需要的标志。
AC_HEADER_STDC检查当前平台上是否有标准的ANSI头文件,如果有,则定义STDC_HEADERS。
AC_ARG_PROGRAM添加一些选项到configure中,让用户能够修改安装程序的名称(如果在用户系统上碰巧有一个与要安装的程序名称相同的程序,这是很有用的)。
AM_PROG_LIBTOOL是由automake用来设置libtool的用途的。只在计划编译共享库或动态可加载模块时才需要设置这个值。
GNOME_COMPILE_WARNINGS给gcc命令行添加许多警告选项,但是在其他绝大多数的编译器上什么也不做。
ALL_LINGUAS=“es”不是一个宏,只是一句shell代码。它包含一个由空格分隔的语言种类缩写表,对应于po子目录下的.po文件。.po文件包含翻译成其他语言的文本,所以ALL_LINGUAS应该列出程序已经被翻译成的所有语言。
另外 配置configure时后缀参数可选择
--host=HOST
是指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.--build=BUILD
是指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.--target=GARGET
是指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用'--host'选项的值.
--prefix=/work/gaoht/gsoap/target
是指定软件安装的位置一般而言,我们只要指定 --host 就可以了
记住:--host 指定的是交叉编译工具链的前缀
LDFLAGS="-L/usr/non-standard-path/python/lib"
编译流程
交叉编译
确保交叉编译工具链的bin文件在PATH环境变量里,请先透过命令检查下,如果不在,需要手动添加进来。确认OK之后,查看GCC等相关编译工具的前缀, 这个需要在执行configure时,指定host的
#echo $PATH/usr/local/bin:/bin:/usr/bin:/opt/xxx/bin/#ls /opt/xxx/bin/arm-brcm-linux-gnueabi-addr2line arm-brcm-linux-gnueabi-gcov arm-brcm-linux-gnueabi-strip arm-linux-gccbug arm-linux-size arm-linux-uclibc-gcc arm-linux-uclibc-readelfarm-brcm-linux-gnueabi-ar arm-brcm-linux-gnueabi-gprof arm-linux-addr2line arm-linux-gcov arm-linux-strings arm-linux-uclibc-gcc-4.2.3 arm-linux-uclibc-sizearm-brcm-linux-gnueabi-as arm-brcm-linux-gnueabi-ld arm-linux-ar arm-linux-gprof arm-linux-strip arm-linux-uclibc-gccbug arm-linux-uclibc-stringsarm-brcm-linux-gnueabi-c++ arm-brcm-linux-gnueabi-nm arm-linux-as arm-linux-ld arm-linux-uclibc-addr2line arm-linux-uclibc-gcov arm-linux-uclibc-striparm-brcm-linux-gnueabi-c++filt arm-brcm-linux-gnueabi-objcopy arm-linux-c++ arm-linux-ldd-VK-copy-test arm-linux-uclibc-ar arm-linux-uclibc-gprof mkfs.jffs2arm-brcm-linux-gnueabi-cpp arm-brcm-linux-gnueabi-objdump arm-linux-c++filt arm-linux-nm arm-linux-uclibc-as arm-linux-uclibc-ld ncurses5-configarm-brcm-linux-gnueabi-g++ arm-brcm-linux-gnueabi-ranlib arm-linux-cpp arm-linux-objcopy arm-linux-uclibc-c++ arm-linux-uclibc-nm sumtoolarm-brcm-linux-gnueabi-gcc arm-brcm-linux-gnueabi-readelf arm-linux-g++ arm-linux-objdump arm-linux-uclibc-c++filt arm-linux-uclibc-objcopyarm-brcm-linux-gnueabi-gcc-4.2.3 arm-brcm-linux-gnueabi-size arm-linux-gcc arm-linux-ranlib arm-linux-uclibc-cpp arm-linux-uclibc-objdumparm-brcm-linux-gnueabi-gccbug arm-brcm-linux-gnueabi-strings arm-linux-gcc-4.2.3 #./configure --host=arm-brcm-linux-gnueabi#make
查看make的log
[~/Signature/class="lazy" data-src/libbmp-0.1.3]$ make clean;make
Making clean in build
make[1]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/build'
rm -rf .libs _libs
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/build'
Making clean in test
make[1]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/test'
rm -f bmptest
rm -rf .libs _libs
rm -f *.o
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/test'
Making clean in class="lazy" data-src
make[1]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/class="lazy" data-src'
test -z "libbmp.la" || rm -f libbmp.la
rm -f "./so_locations"
rm -rf .libs _libs
rm -f *.o
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/class="lazy" data-src'
Making clean in .
make[1]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
rm -rf .libs _libs
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
make all-recursive
make[1]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
Making all in class="lazy" data-src
make[2]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/class="lazy" data-src'
/bin/bash ../libtool --tag=CC --mode=compile arm-brcm-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT bmpfile.lo -MD -MP -MF .deps/bmpfile.Tpo -c -o bmpfile.lo bmpfile.c
libtool: compile: arm-brcm-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT bmpfile.lo -MD -MP -MF .deps/bmpfile.Tpo -c bmpfile.c -fPIC -DPIC -o .libs/bmpfile.o
libtool: compile: arm-brcm-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT bmpfile.lo -MD -MP -MF .deps/bmpfile.Tpo -c bmpfile.c -o bmpfile.o >/dev/null 2>&1
mv -f .deps/bmpfile.Tpo .deps/bmpfile.Plo
/bin/bash ../libtool --tag=CC --mode=link arm-brcm-linux-gnueabi-gcc -g -O2 -version-info 101:2:101 -lm -o libbmp.la -rpath /usr/local/lib bmpfile.lo
libtool: link: arm-brcm-linux-gnueabi-gcc -shared .libs/bmpfile.o -lm -Wl,-soname -Wl,libbmp.so.0 -o .libs/libbmp.so.0.101.2
libtool: link: (cd ".libs" && rm -f "libbmp.so.0" && ln -s "libbmp.so.0.101.2" "libbmp.so.0")
libtool: link: (cd ".libs" && rm -f "libbmp.so" && ln -s "libbmp.so.0.101.2" "libbmp.so")
libtool: link: arm-brcm-linux-gnueabi-ar cru .libs/libbmp.a bmpfile.o
libtool: link: arm-brcm-linux-gnueabi-ranlib .libs/libbmp.a
libtool: link: ( cd ".libs" && rm -f "libbmp.la" && ln -s "../libbmp.la" "libbmp.la" )
make[2]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/class="lazy" data-src'
Making all in test
make[2]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/test'
arm-brcm-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I.. -I../class="lazy" data-src -g -O2 -MT test.o -MD -MP -MF .deps/test.Tpo -c -o test.o test.c
mv -f .deps/test.Tpo .deps/test.Po
/bin/bash ../libtool --tag=CC --mode=link arm-brcm-linux-gnueabi-gcc -g -O2 -o bmptest test.o ../class="lazy" data-src/libbmp.la
libtool: link: arm-brcm-linux-gnueabi-gcc -g -O2 -o .libs/bmptest test.o ../class="lazy" data-src/.libs/libbmp.so -lm
make[2]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/test'
Making all in build
make[2]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/build'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3/build'
make[2]: Entering directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
make[2]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
make[1]: Leaving directory `/home/lumi/Signature/class="lazy" data-src/libbmp-0.1.3'
来源地址:https://blog.csdn.net/godleo0/article/details/129797781
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341