我的编程空间,编程开发者的网络收藏夹
学习永远不晚

交叉编译-configure配置

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

交叉编译-configure配置

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux如何配置arm交叉编译器

要配置ARM交叉编译器,可以按照以下步骤进行操作:1. 安装ARM交叉编译器工具链:ARM交叉编译器工具链是专门用于ARM架构的编译器。可以从ARM官网或者第三方提供的源获取工具链。常见的ARM交叉编译器工具链有GCC和Clang。选择一种
2023-08-11

ubuntu下交叉编译模块驱动怎么配置

在Ubuntu下交叉编译模块驱动,需要进行以下配置步骤:1. 安装交叉编译工具链:首先需要安装交叉编译工具链,可以通过以下命令进行安装:```sudo apt-get install gcc-arm-linux-gnueabi```2. 设
2023-08-11

Valgrind为ARMv5tel交叉编译

要将Valgrind交叉编译为ARMv5tel架构,你需要在交叉编译环境中安装ARMv5tel的交叉编译工具链,并按照以下步骤进行操作:1. 下载Valgrind的源代码:```shellwget https://sourceware.or
2023-09-17

什么是交叉编译(CROSS_COMPILE)

交叉编译是在一个平台上为另一个平台编译程序的过程。当源代码平台(编译平台)与目标代码平台(运行平台)不同时,就需要交叉编译。在嵌入式开发和跨平台应用中,交叉编译尤为重要。在嵌入式开发中,硬件设备往往没有足够的资源来运行完整的编译环境。使用CROSS_COMPILE环境变量,开发者能够方便地指定交叉编译工具链的路径和前缀,从而轻松实现跨平台的软件开发。
什么是交叉编译(CROSS_COMPILE)
2023-10-29

如何查看ubuntu交叉编译器

要查看Ubuntu交叉编译器,请按照以下步骤操作:1. 打开终端。2. 运行以下命令来安装交叉编译器:```sudo apt-get install gcc-arm-linux-gnueabi```3. 安装完成后,你可以通过运行以下命令来
2023-08-26

如何交叉编译Python到ARM-Lin

前言我需要在Arm9的s3c2410 CPU上运行python,以下是我的编译过程。host编译环境:ubuntu 7.04, gcc 4.2.1, arm-linux-gcc 3.3.2要cross compile的程序:sqlite 3
2023-01-31

ubuntu怎么安装交叉编译器

在Ubuntu上安装交叉编译器,可以按照以下步骤进行操作:打开终端,使用以下命令更新包列表:sudo apt update安装交叉编译器的依赖项。根据具体的交叉编译器需求,可能需要不同的依赖项。以下是一些常见的依赖项:对于ARM交叉编译器:
2023-10-27

ubuntu交叉编译工具如何安装

要安装Ubuntu的交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端窗口。2. 更新软件包列表,运行以下命令:sudo apt update3. 安装交叉编译工具链,运行以下命令:sudo apt install gcc-arm-l
2023-09-20

linux交叉编译的原理是什么

本篇内容主要讲解“linux交叉编译的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux交叉编译的原理是什么”吧!在linux中,交叉编译是指在一个平台上生成另一个平台上的可执行
2023-06-30

ubuntu交叉编译环境怎么创建

要在Ubuntu上创建交叉编译环境,您需要执行以下步骤:1. 安装必要的软件包:```sudo apt updatesudo apt install build-essential```2. 下载交叉编译工具链:您需要根据您的目标平台下载适
2023-08-26

Fedora SkyEye如何安装交叉编译器

这篇文章给大家分享的是有关Fedora SkyEye如何安装交叉编译器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Fedora SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下
2023-06-16

ubuntu怎么安装交叉编译环境

要在Ubuntu上安装交叉编译环境,您需要执行以下步骤:1. 更新系统软件包列表:```sudo apt update```2. 安装交叉编译工具链。根据您希望进行的交叉编译目标,选择并安装相应的工具链。例如,如果您要进行ARM交叉编译,可
2023-10-11

linux交叉编译环境如何搭建

搭建Linux交叉编译环境需要以下步骤:1. 安装交叉编译工具链:交叉编译工具链是为了在一种操作系统上生成另一种操作系统的可执行文件。可以通过以下几种方式安装交叉编译工具链:- 使用发行版提供的交叉编译工具链:有些Linux发行版提供了官方
2023-08-11

ubuntu交叉编译工具怎么安装

要在Ubuntu上安装交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端。2. 更新软件包列表:`sudo apt update`。3. 安装交叉编译工具链:`sudo apt install gcc-arm-linux-gnueab
2023-08-11

编程热搜

目录