广告
返回顶部
首页 > 资讯 > 服务器 >交叉编译-configure配置
  • 950
分享到

交叉编译-configure配置

linux服务器 2023-10-24 14:10:19 950人浏览 薄情痞子
摘要

配置configure.ac 用自动生成Makefile的工具来生成Makefile的过程中,需要用autoscan命令来生成configure.scan文件,然后将它改名字为configure.ac或者configure.in,然后就来更

配置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_WARNINGSGCc命令行添加许多警告选项,但是在其他绝大多数的编译器上什么也不做。

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/SRC/libbmp-0.1.3]$ make clean;make
Making clean in build
make[1]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3/build'
rm -rf .libs _libs
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3/build'
Making clean in test
make[1]: Entering directory `/home/lumi/Signature/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/SRC/libbmp-0.1.3/test'
Making clean in src
make[1]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3/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/SRC/libbmp-0.1.3/src'
Making clean in .
make[1]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3'
rm -rf .libs _libs
rm -f *.lo
make[1]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3'
make  all-recursive
make[1]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3'
Making all in src
make[2]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3/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/SRC/libbmp-0.1.3/src'
Making all in test
make[2]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3/test'
arm-brcm-linux-gnueabi-gcc  -DHAVE_CONFIG_H -I. -I.. -I../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 ../src/libbmp.la
libtool: link: arm-brcm-linux-gnueabi-gcc -g -O2 -o .libs/bmptest test.o  ../src/.libs/libbmp.so -lm
make[2]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3/test'
Making all in build
make[2]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3/build'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3/build'
make[2]: Entering directory `/home/lumi/Signature/SRC/libbmp-0.1.3'
make[2]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3'
make[1]: Leaving directory `/home/lumi/Signature/SRC/libbmp-0.1.3'

来源地址:https://blog.csdn.net/godleo0/article/details/129797781

--结束END--

本文标题: 交叉编译-configure配置

本文链接: https://www.lsjlt.com/news/441564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 交叉编译-configure配置
    配置configure.ac 用自动生成Makefile的工具来生成Makefile的过程中,需要用autoscan命令来生成configure.scan文件,然后将它改名字为configure.ac或者configure.in,然后就来更...
    99+
    2023-10-24
    linux 服务器
  • linux如何配置arm交叉编译器
    要配置ARM交叉编译器,可以按照以下步骤进行操作:1. 安装ARM交叉编译器工具链:ARM交叉编译器工具链是专门用于ARM架构的编译...
    99+
    2023-08-11
    linux
  • ubuntu下交叉编译模块驱动怎么配置
    在Ubuntu下交叉编译模块驱动,需要进行以下配置步骤:1. 安装交叉编译工具链:首先需要安装交叉编译工具链,可以通过以下命令进行安装:```sudo apt-get install gcc-arm-linux-gnueabi```2....
    99+
    2023-08-11
    ubuntu
  • golang交叉编译详细
    目录1、环境变量对照表2、使用2.1 Windows 2.2 linux2.3 Mac OS3、备注3.1 CGO_ENABLED解释 1、环境变量对照表 golang交叉编译环境变...
    99+
    2022-11-12
  • Valgrind为ARMv5tel交叉编译
    要将Valgrind交叉编译为ARMv5tel架构,你需要在交叉编译环境中安装ARMv5tel的交叉编译工具链,并按照以下步骤进行操...
    99+
    2023-09-17
    Valgrind
  • 什么是交叉编译(CROSS_COMPILE)
    1.交叉编译的基本介绍 交叉编译不仅仅是编译过程的简单变种,它涉及到为不同的架构和平台编译代码。当你在PC上为ARM、MIPS或其他任何不同的架构编写和编译代码时,你正在进行交叉编译。这在嵌入式系统、IoT设备和多平台应用中尤其重要,...
    99+
    2023-10-29
    CROSS_COMPILE
  • Golang交叉编译(跨平台编译)的使用
    目录一、何为交叉编译二、交叉编译前的准备安装TDM-GCC三、简述交叉编译四、实练1. 默认编译2.交叉编译一个Arm+Linux小总结一、何为交叉编译 简单地说,就是在一个平台上生...
    99+
    2022-11-11
  • ubuntu如何交叉编译环境
    12ubuntu交叉编译环境的搭建示例:打开终端命令行。输入以下命令安装交叉编译环境。sudo apt-get install gcc g++ libcc1 libg++ make gdb再输入以下命令安装交叉编译器。wget ftp://...
    99+
    2022-10-20
  • Golang交叉编译之跨平台编译使用详解
    目录在CMD命令行中编译设置Linux编译环境powershell命令行中一、CGO_ENABLED二、GOOS三、GOARCH四、GOHOSTOS五、GOHOSTARCH六、go ...
    99+
    2022-11-11
  • ubuntu怎么安装交叉编译器
    在Ubuntu上安装交叉编译器,可以按照以下步骤进行操作: 打开终端,使用以下命令更新包列表: sudo apt update ...
    99+
    2023-10-27
    ubuntu
  • 如何交叉编译Python到ARM-Lin
    前言 我需要在Arm9的s3c2410 CPU上运行python,以下是我的编译过程。 host编译环境: ubuntu 7.04, gcc 4.2.1, arm-linux-gcc 3.3.2 要cross compil...
    99+
    2023-01-31
    Python ARM Lin
  • 如何查看ubuntu交叉编译器
    要查看Ubuntu交叉编译器,请按照以下步骤操作:1. 打开终端。2. 运行以下命令来安装交叉编译器:```sudo apt-get...
    99+
    2023-08-26
    ubuntu
  • ubuntu怎么安装交叉编译环境
    要在Ubuntu上安装交叉编译环境,您需要执行以下步骤:1. 更新系统软件包列表:```sudo apt update```2. 安...
    99+
    2023-10-11
    ubuntu
  • Fedora SkyEye如何安装交叉编译器
    这篇文章给大家分享的是有关Fedora SkyEye如何安装交叉编译器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Fedora SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下...
    99+
    2023-06-16
  • ubuntu交叉编译工具如何安装
    要安装Ubuntu的交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端窗口。2. 更新软件包列表,运行以下命令:sudo ap...
    99+
    2023-09-20
    ubuntu
  • linux交叉编译的原理是什么
    本篇内容主要讲解“linux交叉编译的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux交叉编译的原理是什么”吧!在linux中,交叉编译是指在一个平台上生成另一个平台上的可执行...
    99+
    2023-06-30
  • linux交叉编译环境如何搭建
    搭建Linux交叉编译环境需要以下步骤:1. 安装交叉编译工具链:交叉编译工具链是为了在一种操作系统上生成另一种操作系统的可执行文件。可以通过以下几种方式安装交叉编译工具链:- 使用发行版提供的交叉编译工具链:有些Linux发行版提供了...
    99+
    2023-08-11
    linux
  • ubuntu交叉编译工具怎么安装
    要在Ubuntu上安装交叉编译工具,您可以按照以下步骤进行操作:1. 打开终端。2. 更新软件包列表:`sudo apt updat...
    99+
    2023-08-11
    ubuntu
  • ubuntu交叉编译环境怎么创建
    要在Ubuntu上创建交叉编译环境,您需要执行以下步骤:1. 安装必要的软件包:```sudo apt updatesudo apt...
    99+
    2023-08-26
    ubuntu
  • C++中protobuf 的交叉编译使用详解
    目录前言简介使用方式编译安装使用步骤常见问题解决方案前言 为了提高通信效率,可以采用 protobuf 替代 XML 和 Json 数据交互格式,protobuf 相对来说数据量小,...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作