导航:首页 > 源码编译 > 执行交叉编译

执行交叉编译

发布时间:2023-04-01 08:11:48

linux与windows交叉编译

这篇文章主要说明的是将linux上编译的程序放到windows上运行。历核

首先,我的主机与虚拟机都是64位的,虚拟机为ubuntu。

编写一个简单的测试程序:

然后将虚拟机做如下设置:

使用如下方法将差戚exe拷贝到windows上:

将程序拷贝到windows上。

按照windows上的程序执虚烂陵行方法,执行该hello.exe即可。

❷ clion中C项目交叉编译说明

1、  在项目的CMakeLists.txt的开始处加上如下图所示配置(配置中的目录为你需要编译器的目录),平时开发调试的时候,正蔽宏设置SET( CROSS_COMPILE 0 ) 即不启用交叉编译。

2、 交叉编译:首先SET( CROSS_COMPILE  1),然后把项目通过scp传输到linux虚拟机或者服务器上

3、执行 cmake /path/your/project (项目根目录),这一步会生成交叉环境配置的Makefile

4、 在项目根目录,执行 make ,这一步会生成和项目名举册同名的可执行文件demo中为hello

5、Scp可执行文件到开发版,运行可执行文件。

SET( CROSS_COMPILE 1 )

IF ( CROSS_COMPILE )

    SET(

CMAKE_SYSTEM_NAME linux )

    SET(

TOOLCHAIN_DIR " /home/sz/project/arm-linux-gnueabihf ")

# specify the cross compiler

    SET( CMAKE_C_COMPILER   ${ TOOLCHAIN_DIR } /bin/arm-linux-gnueabihf-gcc )

    SET(

CMAKE_CXX_COMPILER ${ TOOLCHAIN_DIR } /bin/arm-linux-gnueabihf-g++ )

    SET(

GNU_FLAGS " -mfpu=vfp -fPIC ")

    SET(

CMAKE_CXX_FLAGS " ${ GNU_FLAGS } ")

    SET(

CMAKE_C_FLAGS " ${ GNU_FLAGS }  ")

# where is the target environment

    SET( CMAKE_FIND_ROOT_PATH  ${ TOOLCHAIN_DIR }

            ${ TOOLCHAIN_DIR } /arm-linux-gnueabihf/include

           并困 ${ TOOLCHAIN_DIR } /arm-linux-gnueabihf/lib )

# search for programs in the build host directories (notnecessary)

    SET( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM

NEVER)

# for libraries and headers in the target directories

    SET( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY

ONLY)

    SET(

CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

ENDIF ( CROSS_COMPILE )

❸ 什么是交叉编译,为什么要使用交叉编译

交叉编译的概念(来自网络):

简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。
举个例子:
我们在Linux系统比如Ubuntu上编写的C程序完全可以拿到Windows系统上正常运行。

❹ 嵌入式系统开发为什么要采用交叉编译的方式

由于嵌入式系统资源匮乏,一般不能像PC一样安装本地编译器和调试器,不能在本地编写、编译和调试自身运行的程序,而需借助其它系统如PC来完成这些工作,这样的系统通常被称为宿主机。宿主机通常是Linux系统,并安装交叉编译器、调试器等工具;宿主机也可以是Windows系统,安装嵌入式Linux集成开发环境。在宿主机上编写和编译代码,通过串口、网口或者硬件调试器将程序下载到目标系统里面运行。所谓的交叉编译,就是在宿主机平台上使用某种特定的交叉编译器,为某种与宿主机不同平台的目标系统编译程序,得到的程序在目标系统上运行而非在宿主机本地运行。这里的平台包含两层含义:一是核心处理器的架构,二是所运行的系统,这样,交叉编译有3种情形:(1)目标系统与宿主机处理器相同,运行不同的系统;(2)目标系统与宿主机处理器不同,运行相同的系统;(3)目标系统与宿主机处理器不同,运行不同的系统。实际上,在PC机上进行非Linux的嵌入式开发,哪怕使用IDE集成环境如Keil、ADS、Realview,都是交叉编译和调试的过程,只是IDE工具隐藏了细节,没有明确提出这个概念而已。

❺ linux里opencv怎么交叉编译

一、交叉编译opencv 构造: 下载:各个库的下载可以直接搜名字到官网下载 几个关键解释: “--prefix=” 后边跟make install时的位置,本例中,libz在make install时将安装到/usr/arm-linux-gnueabihf中 “--host=” 后边跟arm-linux表明使用的是ARM环境 有configure的才能进行configure配置 4)所有的makefile修改类似 Libz的交叉编译 第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared 第二步:修改makefile,主要有下边几个,修改的时候通篇参照即可 CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar rc RANLIB=arm-linux-gnueabihf-ranlib STRIP = arm-linux-gnueabihf-strip 如果有ARCH的话,ARCH=ARM 第三步:#sudo make #sudo make install Libjpeg的交叉编译 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:参考1)中方法修改makefile 第三步:#sudo make #sudo make install Libpng的交叉编译 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc 第二步:参考1)中方法修改makefile 第三步:#sudo make #sudo make install Yasm的交叉编译 第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static 第二步:修改makefile 第三步:#sudo make #sudo make install Libx264的交叉编译 第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf 第二步:修改config.mak里的参数,因为makefile要调用config.mak,所以修改方法同makefile 第三步:#sudo make #sudo make install Libxvid的交叉编译 第一步:首先切换目录 #cd build/generic 第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly 第三步:#sudo make #sudo make install ffmpeg的交叉编译 第一步: ./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf 第二步:修改makefile文件 第三步:#sudo make #sudo make install 第四步:将ffmpeg加入pkg-config 执行#sudo gedit /etc/bash.bashrc,在末尾加入 export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfig export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/ 完毕后使用命令:#source /etc/bash.bashrc 或者单独使用三个export,不过寿命只在一个终端中,终端关闭时就失效。 几个关键解释:--extra-flags指向xvid的安装路径,--extra-ldflags指向x264的路径 安装cmake-gui 执行:#sudo apt-get install cmake-qt-gui Opencv的交叉编译 第一步:修改opencv/platflrms/linux/目录下的arm-gnueabi.toolchain.cmake,将其所有删掉,写入: set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc ) set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ ) 第二步:在opencv目录下新建build目录,进入build目录,执行命令: #cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../ 这时,要保证出现: 第三步:使用cmake-gui打开CMakeCache.txt,去掉所有的无关项,修改CMAKE_INSTALL_PREFIX,来确定make install的目录 第四步:#sudo make #sudo make install 可能出现的错误: opencv编译不通过,出现skip之类的,说明ffmpeg没编译好,或者其编译好了,但是pkg-config没有设置好,一定要设置好其环境 前边几步不通过的话,看看命令有没有少,或者有没有修改好makefile 在arm上使用时,一种方法时直接将编译好的opencv目录下的lib文件拷贝到开发板对应的/lib目录下,其他或者拷贝到自己指定的目录,并设置好环境变量即可使用

❻ 什么是交叉编译

在一个平台架构上,编译另一个平台架构的可执行代码,就是交锋漏叉编译。
例如在x86架构的pc上编译arm嵌入式设备的可执行程序。
交叉编译是不得不用,伍前
首先在目标设备的系统还没引导起来的时候腔基清,编译目标平台的引导程序,显然只能交叉编译。
还有因为目标设备往往能力太低,没法安装编译器,或者勉强安装了,也慢得像蜗牛。

❼ 什么是交叉编译,为什么要采用交叉编译

在一个平台架构上,编译另一个平台架构的可执行代码,就是交叉编译。
例如在x86架构的PC上编译arm嵌入式设备的可执行程序。
交叉编译是不得不用,
首先在目标设备的系统还没引导起来的时候,编译目标平台的引导程序,显然只能交叉编译。
还有因为目标设备往往能力太低,没法安装编译器,或者勉强安装了,也慢得像蜗牛。

❽ 如何交叉编译mkfs.jffs2等工具链mtd-utils

首先说明一下:
在YAFFS2源文件的utils目录下,执行make就可以生成 mkyaffs2image工具,执行
.(要制作yaffs2的目录) (目标镜像)/mkyaffs2image

acl_2.2.47.orig.tar.gz
lzo-2.03.tar.gz
mtd-utils_20080508.orig.tar.gz
zlib-1.2.3.tar.gz
mkfs.jffs2.for.arm-linux-gcc.3.4.1平台.tar.bz2
mkfs.jffs2.for.arm-linux-gcc.4.3.2平台.tar.bz2
mkfs.jffs2.for.pc平台.tar.bz2

如果只需要mkfs.jffs2工具,那么ubuntu 8.10下直接安装jffnms软件包即可,
luther@gliethttp:~$ sudo apt-get install jffnms
如果需要将jffs2移植到arm开发板上,那么就需要下载源码进行交叉编译了,这就是本文的内容.
1.下载工具软件源码包
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/m/mtd-utils/mtd-utils_20080508.orig.tar.gz
luther@gliethttp:~$ wget http://www.zlib.net/zlib-1.2.3.tar.gz
luther@gliethttp:~$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
luther@gliethttp:~$ mkdir libs 用来存放下面生成的lib库.
2.编译zlib库
luther@gliethttp:~/zlib-1.2.3$ ./configure --prefix=~/libs --shared
对于交叉编译输入如下指令
luther@gliethttp:~/zlib-1.2.3$ CC=arm-linux-gcc ./configure --prefix=~/libs --shared
luther@gliethttp:~/zlib-1.2.3$ make -j4
luther@gliethttp:~/zlib-1.2.3$ make install
luther@gliethttp:~$ tree ~/libs
/home/ubuntu/libs
|-- include
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- libz.so -> libz.so.1.2.3
| |-- libz.so.1 -> libz.so.1.2.3
| `-- libz.so.1.2.3
`-- share
`-- man
`-- man3
`-- zlib.3
5 directories, 6 files
这就表示完成了.
3.编译lzo库
luther@gliethttp:~/lzo-2.03$ ./configure --prefix=/home/ubuntu/libs --enable-shared
对于交叉编译输入如下指令
luther@gliethttp:~/lzo-2.03$ CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/ubuntu/libs --enable-shared --disable-static
这个还必须要绝对路径才行.
luther@gliethttp:~/lzo-2.03$ make
luther@gliethttp:~/lzo-2.03$ make install
luther@gliethttp:~$ tree ~/libs
.
|-- include
| |-- lzo
| | |-- lzo1.h
| | |-- lzo1a.h
| | |-- lzo1b.h
| | |-- lzo1c.h
| | |-- lzo1f.h
| | |-- lzo1x.h
| | |-- lzo1y.h
| | |-- lzo1z.h
| | |-- lzo2a.h
| | |-- lzo_asm.h
| | |-- lzoconf.h
| | |-- lzodefs.h
| | `-- lzoutil.h
| |-- zconf.h
| `-- zlib.h
|-- lib
| |-- liblzo2.a
| |-- liblzo2.la
| |-- liblzo2.so -> liblzo2.so.2.0.0
| |-- liblzo2.so.2 -> liblzo2.so.2.0.0
| |-- liblzo2.so.2.0.0
| `-- libz.a
`-- share
`-- man
`-- man3
`-- zlib.3
6 directories, 22 files
手工将静态库删掉就行了,
如果是arm平台还需要strip优化.
4.编译mtd-utils-20080508前的准备工作.
编译之前的代码工作
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/a/acl/acl_2.2.47.orig.tar.gz
luther@gliethttp:~$ mkdir libs/include/sys -p
luther@gliethttp:~$ cp acl-2.2.47/include/acl.h libs/include/sys
luther@gliethttp:~/mtd-utils-20080508$ export LD_LIBRARY_PATH=~/libs/lib:$LD_LIBRARY_PATH
如果还找不到-llzo2,那么把他拷到/usr/lib下,对于交叉编译器,就是拷贝到
比如
luther@gliethttp:~/libs/lib$ sudo cp -a * /vobs/tools/arm-tools/arm-linux-gcc-3.4.1/arm-linux/lib/
luther@gliethttp:~/mtd-utils-20080508$ vim Makefile
修改安装路径
DESTDIR=.
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
修改CFLAGS变量
CFLAGS := -I./include -I/home/ubuntu/libs/include $(OPTFLAGS)
如果是arm-linux-gcc定义为
CFLAGS := -I./include -I/home/ubuntu/libs/include -DAI_ADDRCONFIG=0x0020 $(OPTFLAGS)
来自/usr/include/netdb.h
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/Makefile
DESTDIR := ~/mtd-utils-20080508
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
luther@gliethttp:~/mtd-utils-20080508$ vim recv_image.c
拷贝/usr/include/netinet/in.h文件中
arm-linux-gcc中不需要拷贝它.
struct ip_mreq
{

struct in_addr imr_multiaddr;

struct in_addr imr_interface;
};
结构体数据到头部,否则在u盘版的ubuntu 8.10上老是提示没有ip_mreq定义,虽然上面明明写了#define _USE_MISC
arm-linux-gcc中还需要创建如3下个目录
luther@gliethttp:~/mtd-utils-20080508$ mkdir arm-linux
luther@gliethttp:~/mtd-utils-20080508$ cp -r ubi-utils arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ cp -r include arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/libpfiflash.c
将所有EBUF(PFIFLASH_ERRSTR[-rc]);全部替换为EBUF("%s", PFIFLASH_ERRSTR[-rc]);
vim下替换脚本为
:%s/EBUF(PFIFLASH_ERRSTR\[-rc\]);/EBUF("\%s", PFIFLASH_ERRSTR\[-rc\]);/g
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/ubimirror.c
将第206行的
fprintf(stderr, err_buf);
改为
fprintf(stderr, "%s", err_buf); // 想法是好的,因为err_buf中含有%d等format信息,这样接口更加统一,但是编译器似乎还并不支持这样的操作.[luther.gliethttp]
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/unubi.c
将第898行
char fname[PATH_MAX];
改为
char fname[PATH_MAX+1];
luther@gliethttp:~/mtd-utils-20080508$ cd ubi-utils/new-utils
因为-O2优化的原因,会导致如下log信息
error: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
所有手工先编译.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
对于交叉编译执行如下1条语句
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ arm-linux-gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ cd -
好了,上面的所有修改完成之后,就可以执行make成功编译了[luther.gliethttp].
luther@gliethttp:~/mtd-utils-20080508$ make
如果是交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux-
luther@gliethttp:~/mtd-utils-20080508$ make install
对于交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux- install
luther@gliethttp:~/mtd-utils-20080508$ tree gliethttp/
gliethttp/
|-- sbin
| |-- bin2nand
| |-- doc_loadbios
| |-- docfdisk
| |-- flash_erase
| |-- flash_eraseall
| |-- flash_info
| |-- flash_lock
| |-- flash_otp_mp
| |-- flash_otp_info
| |-- flash_unlock
| |-- flashcp
| |-- ftl_check
| |-- ftl_format
| |-- jffs2mp
| |-- mkbootenv
| |-- mkfs.jffs2
| |-- mkpfi
| |-- mtd_debug
| |-- nand2bin
| |-- nandmp
| |-- nandtest
| |-- nandwrite
| |-- nftl_format
| |-- nftlmp
| |-- pddcustomize
| |-- pfi2bin
| |-- pfiflash
| |-- recv_image
| |-- rfdmp
| |-- rfdformat
| |-- serve_image
| |-- sumtool
| |-- ubiattach
| |-- ubicrc32
| |-- ubicrc32.pl
| |-- ubidetach
| |-- ubigen
| |-- ubimirror
| |-- ubimkvol
| |-- ubinfo
| |-- ubinize
| |-- ubirmvol
| |-- ubiupdatevol
| `-- unubi
`-- share
`-- man
`-- man1
`-- mkfs.jffs2.1.gz
4 directories, 45 files
ep9312开发板上没有任何文件系统flash数据读取
# ./mtd_debug read /dev/mtd0 0 100 gliethttp.bin
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
# hexmp gliethttp.bin
0000000 03ff ea00 350c e59f 001c e583 410e e3a0
0000010 4004 e583 4a03 e3a0 4001 e254 fffd 1aff
0000020 4106 e3a0 4004 e583 420f e202 5000 e594
0000030 4001 e084 5000 e594 4001 e084 5000 e594
0000040 4001 e084 5000 e594 4010 e3a0 4008 e583
0000050 4050 e3a0 4001 e254 fffd 1aff 4e1e e3a0
0000060 4008 e583
0000064
#
# ./mtd_debug read /dev/mtd2 0 100 gliethttp.bin;hexmp gliethttp.bin -Cv
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
00000000 1f 8b 08 00 ca 14 7d 4a 02 03 e4 5a 0f 70 93 e7 |......}J...Z.p..|
00000010 79 7f 3f 49 36 b2 31 41 80 a0 0e 38 cd 57 70 16 |y.?I6.1A...8.Wp.|
00000020 93 18 f3 19 3b 60 12 9a d9 60 08 09 4e 22 c0 a4 |....;`...`..N"..|
00000030 b4 81 ca 42 92 6d 0d 59 d2 49 72 02 2b 4d dd 60 |...B.m.Y.Ir.+M.`|
00000040 72 84 e1 86 03 a7 21 01 8a d2 b2 4b 2e f3 56 76 |r.....!....K..Vv|
00000050 63 b7 34 0b 1d cd b1 1d 6b b3 95 36 dc 95 db d1 |c.4.....k..6....|
00000060 8b 90 d1 ea |....|
00000064

❾ 如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译

步骤一:部署protoc.exe

1)sudo su ---进入管理模式

//以下操作切换至protobuf文件夹

2)./configure

3)make

4)make check

5)make install

此时可以查看protobuf文件夹下面的makefile文件,可以查看-build表示的本机环境以及-host表示的编译库的运行环境

我本地的-build=x86_64-apple-darwin12.3.0

-host=x86_64-apple-darwin12.3.0

(这两个参数在后续配置脚本需要用到,与后面脚步的i686-apple-darwin12.3.0以及arm-apple-darwin12.3.0后缀“arm-apple-darwin12.3.0”保持一致)

6)make distclean清理已生成的makefile,为交叉编译配置新makefile做准备

步骤二:配置交叉编译

1)执行脚本ios-build.sh,脚本内容如下:

configure_for_platform() {

export PLATFORM=$1

#export PLATFORM=iPhoneOS

echo "Platform is ${PLATFORM}"

if [ "$PLATFORM" == "iPhoneSimulator" ]; then

export ARCHITECTURE=i386

export ARCH=i686-apple-darwin12.3.0

fi

if [ "$PLATFORM" == "iPhoneOS" ]; then

export ARCHITECTURE=$2

export ARCH=arm-apple-darwin12.3.0

fi

export ARCH_PREFIX=$ARCH-

export SDKVER="6.1"
#sdk版本号必须正确

export
DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer

export SDKROOT="$DEVROOT/SDKs/${PLATFORM}$SDKVER.sdk"

export
PKG_CONFIG_PATH="$SDKROOT/usr/lib/pkgconfig:$DEVROOT/usr/lib/pkgconfig"

export AS="$DEVROOT/usr/bin/as"

export ASCPP="$DEVROOT/usr/bin/as"

export AR="$DEVROOT/usr/bin/ar"

export RANLIB="$DEVROOT/usr/bin/ranlib"

#export CPP="$DEVROOT/usr/bin/c++"

#export CXXCPP="$DEVROOT/usr/bin/c++"

export CC="$DEVROOT/usr/bin/gcc"

export CXX="$DEVROOT/usr/bin/g++"

export LD="$DEVROOT/usr/bin/ld"

export STRIP="$DEVROOT/usr/bin/strip"

export LIBRARY_PATH="$SDKROOT/usr/lib"

export CPPFLAGS=""

#export CFLAGS="-arch armv7 -fmessage-length=0 -pipe -fpascal-strings
-miphoneos-version-min=4.0 -isysroot=$SDKROOT -I$SDKROOT/usr/include
-I$SDKROOT/usr/include/c++/4.2.1/"

export CFLAGS="-arch ${ARCHITECTURE} -fmessage-length=0 -pipe
-fpascal-strings -miphoneos-version-min=4.0 -isysroot=$SDKROOT
-I$SDKROOT/usr/include -I$SDKROOT/usr/include/c++/4.2.1/"

export CXXFLAGS="$CFLAGS"

#export LDFLAGS="-isysroot='$SDKROOT' -L$SDKROOT/usr/lib/system
-L$SDKROOT/usr/lib/"

export LDFLAGS="-arch ${ARCHITECTURE} -isysroot='$SDKROOT'
-L$SDKROOT/usr/lib/system -L$SDKROOT/usr/lib/"

./configure --host=${ARCH} --with-protoc=protoc --enable-static
--disable-shared

}

mkdir ios-build

#build for iPhoneSimulator

configure_for_platform iPhoneSimulator

make clean

make

cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-i386.a

#提取完整版本(i386)

cp src/.libs/libprotobuf.a ios-build/libprotobuf-i386.a

#build for iPhoneOS armv7

configure_for_platform iPhoneOS armv7

make clean

make

cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-armv7.a

#提取完整版本(armv7)

cp src/.libs/libprotobuf.a ios-build/libprotobuf-armv7.a

#build for iPhoneOS armv7s

configure_for_platform iPhoneOS armv7s

make clean

make

cp src/.libs/libprotobuf-lite.a ios-build/libprotobuf-lite-armv7s.a

#提取完整版本(armv7s)

cp src/.libs/libprotobuf.a ios-build/libprotobuf-armv7s.a

make clean

#cerate a fat library containing all achitectures in libprotobuf-lite.a

xcrun -sdk iphoneos lipo -arch armv7 ios-build/libprotobuf-lite-armv7.a -arch
armv7s ios-build/libprotobuf-lite-armv7s.a -arch i386
ios-build/libprotobuf-lite-i386.a -create -output
ios-build/libprotobuf-lite.a

#合并三个完整版本(libprotobuf.a)

xcrun -sdk iphoneos lipo -arch armv7 ios-build/libprotobuf-armv7.a -arch
armv7s ios-build/libprotobuf-armv7s.a -arch i386 ios-build/libprotobuf-i386.a
-create -output ios-build/libprotobuf.a

2)将打包生成的libprotobuf-lite.a和libprotobuf.a复制至工程下进行编译,可以编译protobuf在xcode上的模拟器版本和真机版本,完成交叉编译。

阅读全文

与执行交叉编译相关的资料

热点内容
程序员王者昵称 浏览:231
编译过程中源码被扫描几次 浏览:880
刚刚上映什么网址可以看 浏览:183
外国爱情激情片 浏览:255
app怎么引用网站 浏览:111
单片机的按键焊接步骤 浏览:851
mqforlinux下载 浏览:89
安卓10推特怎么下载 浏览:655
现在有什么网址可以看片 浏览:945
武林盟主私密记事txt下载 浏览:397
功夫在哪拍的 浏览:321
可以在线观看的网址有哪些 浏览:954
索亚之书pdf 浏览:146
cc聊天加密软件 浏览:100
票据识别垂向算法 浏览:919
linuxshell拷贝 浏览:275
演员金燕电影 浏览:305
金燕主演电影 浏览:351
微云同步电脑本地文件夹收费吗 浏览:835
安卓编译sshd 浏览:87