当前位置:首页 » 编程软件 » 交叉编译ios

交叉编译ios

发布时间: 2024-10-21 19:12:50

c语言程序exe如何在手机运行

Android设备上的应用程序大都是用Java语言编写的,但有时我们需要用C语言进行一些底层的开发,但我们一般的PC机CPU都是Intelx86架构,而大多数移动设备CPU都是ARM架构,因此在linux编译运行的可执行程序是不能直接在Android手机上运行的,但是我们可以在PC机上交叉编译出能在ARM平台下运行的程序。

1.安装交叉编译工具

首先,我们需要在Linux下安装 arm-none-linux-gnueabi-gcc交叉编译工具链下载地址(找了好久~_~)

不多说了,放到usr/local/bin目录下,解压文件包,解压后得到一个arm-2009q1文件夹,然后把arm-2009q1下的bin目录配进环境变量

如果在终端下执行arm-none-linux-gnueabi-gcc -v可以成功的话,就说明配置成功了,如图

php可以做APP的后台吗

用PHP写App服务端肯定没问题的。

每家技术企业都会养php技术人员,例如一些系统后台的制作、网站后台的制作、小中型APP的后台数据制作。但大型APP后台最好还是JAVA比较合理。

当然你想在Android/iOS上跑PHP解释器也是可以的。

把PHP交叉编译到这些平台即可。

比如我打包的Android上的PHPDroid,以及老外打包的iOS上的DraftCode.

最后,php就是做后台数据分析及前台数据展现等工作的。

php是世界上最好的语言,希望所以的phper能在php的道路上越走越好。

⑶ 如何使用clang+llvm+binutils+newlib+gdb搭建交叉编译环境

1,Build llvm/clang/lldb/lld 3.5.0等组件

1.0 准备:

至少需要从llvm.org下载llvm, cfe, lldb, compiler-rt,lld等3.5.0版本的代码。

$tar xf llvm-3.5.0.src.tar.gz

$cd llvm-3.5.0.src

$mkdir -p tools/clang
$mkdir -p tools/clang/tools/extra
$mkdir -p tools/lld
$mkdir -p projects/compiler-rt

$tar xf cfe-3.5.0.src.tar.xz -C tools/clang --strip-components=1
$tar xf compiler-rt-3.5.0.src.tar.xz -C projects/compiler-rt --strip-components=1
$tar xf lldb-3.5.0.src.tar.xz -C tools/clang/tools/extra --strip-components=1
$tar xf lld-3.5.0.src.tar.xz -C tools/lld --strip-components=1
1.1 【可选】使用clang --stdlib=libc++时,自动添加-lc++abi。

libc++组件可以使用gcc libstdc++的supc++ ABI,也可以使用c++abi,cxxrt等,实际上自动添加-lc++abi是不必要的,这里这么处理,主要是为了方便起见。实际上完全可以在“clang++ -stdlib=libc++”时再手工添加-lc++abi给链接器。

这里涉及到链接时DSO隐式还是显式的问题,早些时候ld在链接库时会自动引入由库引入的依赖动态库,后来因为这个行为的不可控性,所以ld链接器的行为做了修改,需要显式的写明所有需要链接的动态库,才会有手工添加-lc++abi这种情况出现。

--- llvm-3.0.src/tools/clang/lib/Driver/ToolChain.cpp 2012-03-26 18:49:06.663029075 +0800
+++ llvm-3.0.srcn/tools/clang/lib/Driver/ToolChain.cpp 2012-03-26 19:36:04.260071355 +0800
@@ -251,6 +251,7 @@
switch (Type) {
case ToolChain::CST_Libcxx:
CmdArgs.push_back("-lc++");
+ CmdArgs.push_back("-lc++abi");
break;

case ToolChain::CST_Libstdcxx:
1.2 【必要】给clang++添加-fnolibgcc开关。

这个开关主要用来控制是否连接到libgcc或者libunwind。

注:libgcc不等于libunwind。libgcc_eh以及supc++的一部分跟libunwind功能相当。

注:libgcc_s和compiler_rt的一部分相当。

这个补丁是必要的, 不会对clang的正常使用造成任何影响 ,只有在使用“-fnolibgcc"参数时才会起作用。

之所以进行了很多unwind的引入,主要是为了避免不必要的符号缺失麻烦,这里的处理相对来说是干净的,通过as-needed规避了不必要的引入。

--- llvm-static-3.5.0.bak/tools/clang/lib/Driver/Tools.cpp 2014-09-10 13:46:02.581543888 +0800
+++ llvm-static-3.5.0/tools/clang/lib/Driver/Tools.cpp 2014-09-10 16:03:37.559019321 +0800
@@ -2060,9 +2060,15 @@
".a");

CmdArgs.push_back(Args.MakeArgString(LibClangRT));
- CmdArgs.push_back("-lgcc_s");
- if (TC.getDriver().CCCIsCXX())
- CmdArgs.push_back("-lgcc_eh");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else {
+ CmdArgs.push_back("-lgcc_s");
+ if (TC.getDriver().CCCIsCXX())
+ CmdArgs.push_back("-lgcc_eh");
+ }
}

static void addProfileRT(
@@ -7150,24 +7156,50 @@
bool isAndroid = Triple.getEnvironment() == llvm::Triple::Android;
bool StaticLibgcc = Args.hasArg(options::OPT_static_libgcc) ||
Args.hasArg(options::OPT_static);
+
+
+
if (!D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");

if (StaticLibgcc || isAndroid) {
if (D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");
} else {
if (!D.CCCIsCXX())
CmdArgs.push_back("--as-needed");
- CmdArgs.push_back("-lgcc_s");
+ if (Args.hasArg(options::OPT_fnolibgcc))
+ CmdArgs.push_back("-lunwind");
+ else
+ CmdArgs.push_back("-lgcc_s");
if (!D.CCCIsCXX())
CmdArgs.push_back("--no-as-needed");
}

if (StaticLibgcc && !isAndroid)
- CmdArgs.push_back("-lgcc_eh");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc_eh");
else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX())
- CmdArgs.push_back("-lgcc");
+ if (Args.hasArg(options::OPT_fnolibgcc)) {
+ CmdArgs.push_back("--as-needed");
+ CmdArgs.push_back("-lunwind");
+ CmdArgs.push_back("--no-as-needed");
+ } else
+ CmdArgs.push_back("-lgcc");

// According to Android ABI, we have to link with libdl if we are
// linking with non-static libgcc.
--- llvm-static-3.5.0.bak/tools/clang/include/clang/Driver/Options.td 2014-08-07 12:51:51.000000000 +0800
+++ llvm-static-3.5.0/tools/clang/include/clang/Driver/Options.td 2014-09-10 13:36:34.598511176 +0800
@@ -788,6 +788,7 @@
def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>;
def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>, Flags<[CC1Option]>;
+def fnolibgcc : Flag<["-"], "fnolibgcc">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>;
def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>;
def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>;
def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">;
1.3 llvm的其他补丁。

llvm/clang将gcc toolchain的路径hard code在代码中,请查阅tools/clang/lib/Driver/ToolChains.cpp。

找到x86_64-redhat-linux之类的字符串。

如果没有你系统特有的gcc tripple string,请自行添加。

这个tripple string主要是给llvm/clang搜索gcc头文件等使用的,不影响本文要构建的toolchain

1.4 构建clang/llvm/lldb

本文使用ninja。顺便说一下,llvm支持configure和cmake两种构建方式。可能是因为工程太大,这两种构建方式的工程文件都有各种缺陷(主要表现在开关选项上,比如configure有,但是cmake却没有等)。llvm-3.4.1就是因为cmake工程文件的错误而导致了3.4.2版本的发布。

综合而言,cmake+ninja的方式是目前最快的构建方式之一,可以将构建时间缩短一半以上。

mkdir build
cd build

cmake \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_CXX_FLAGS="-std=c++11" \
-DBUILD_SHARED_LIBS=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_TARGETS_TO_BUILD="all" \
-DCLANG_VENDOR="MyOS" ..

ninja

ninja install
如果系统原来就有clang/clang++的可用版本,可以添加:

-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
这样就会使用系统的clang++来构建llvm/clang

2,测试clang/clang++。

自己找几个简单的c/cpp/objc等编译测试一下即可。完整测试可以在构建时作ninja check-all

3,libunwind/libc++/libc++abi,一套不依赖libgcc, libstdc++的c++运行库。

3.1 从https://github.com/pathscale/libunwind 获取代码。

libunwind有很多个实现,比如gnu的libunwind, path64的libunwind,还有libcxxabi自带的Unwinder.

这里作下说明:

1),gnu的libunwind会有符号缺失和冲突。

2),libcxxabi自带的Unwinder是给mac和ios用的,也就是只能在darwin体系构建。目前Linux的实现仍然不全,等linux实现完整了或许就不再需要path64的unwind实现了。

暂时建议使用pathscale的unwind实现。

mkdir -p build
cd build
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS="-m64" ..
ninja

mkdir -p /usr/lib
cp src/libunwind.so /usr/lib
cp src/libunwind.a /usr/lib
3.2 第一次构建libcxx.

必须先构建一次libcxx,以便后面构建libcxxabi。这里构建的libcxx实际上是使用gcc的libgcc/stdc++/supc++的。

打上这个补丁来禁止libgcc的引入:

diff -Nur libcxx/cmake/config-ix.cmake libcxxn/cmake/config-ix.cmake
--- libcxx/cmake/config-ix.cmake 2014-06-25 06:57:50.000000000 +0800
+++ libcxxn/cmake/config-ix.cmake 2014-06-25 09:05:24.980350544 +0800
@@ -28,5 +28,4 @@
check_library_exists(c printf "" LIBCXX_HAS_C_LIB)
check_library_exists(m ccos "" LIBCXX_HAS_M_LIB)
check_library_exists(rt clock_gettime "" LIBCXX_HAS_RT_LIB)
-check_library_exists(gcc_s __gcc_personality_v0 "" LIBCXX_HAS_GCC_S_LIB)
编译安装:

mkdir build
cd build
cmake \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
..
ninja
ninja install
3.3,测试第一次构建的libcxx。

使用"clang++ -stdlib=libc++ -o test test.cpp -lstdc++"编译简单c++代码,检查是否出错。(如果前面构建clang是已经apply了c++abi的链接补丁,这里会出现找不到c++abi的情况,跳过即可)

使用"ldd test"查看test二进制动态库使用情况。可以发现,test依赖于libgcc_s/libc++/libstdc++。(多少有些不爽了吧?使用了libc++居然还要依赖libstdc++?)

⑷ 嵌入式系统到底是什么

嵌入式系统到底是什么
书的话我推荐《嵌入式linux应用开发完全手册》,很不错,你有什么问题可以问我,我通讯大三目前也在研究嵌入式,步骤大致如下:

第一步: 嵌入式开发 pcb设计,一般为开发板的电路裁减和扩充,由开发板原理图为基础,画出PCB和封装库,设计自己的电路。

第二步: SOPC技术,一般为FPGA,CPLD开发,利用VHDL等硬体描述语言做专用arm晶片开发,写出自己的逻辑电路,基于ALTER或XILINUX的FPGA做开发。Arm9

第三步: SOC设计,分前端,后端实现,这是硬体设计的核心技术:晶片设计.能做到这步,已经不属于平凡的技术人员。arm9开发板

软体道路:

第一步:bootloader的编写,修改, 通过这步熟悉ARM硬体结构,学习ARM组合语言,阅读ARM的晶片手册,感觉就是像操作51微控制器一样操作ARM晶片.这一步最好的两个参考资料就是:晶片手册和bootloader原始码。

第二步:系统移植, 驱动开发, 我只做过linux方向,所以也推荐学习嵌入式linux系统,作为标准体系,他开源而且可以获得大量学习资料.作业系统是整个电脑科学的核心,熟悉 kernel实属不易,kernel, 驱动

开发的学习,没有什么捷径,只有多读程式码,多写程式码,熟悉系统API.. understanding linux kernel , linux device driver 都是不可多得的好书,值得一看。

第三步:应用程式的编写,各种GUI的移植,qt , minigui都被大量采用,两种思想都类似,熟悉一种就可以。

软体道路中,驱动系统应该是最深入的部分,不是短时间可以掌握的,需要有勇气和耐心。嵌入式开发,软硬结合,因为硬体条件比PC差很多,所以肯定会遇见不少问题,因此实践的勇气更加重要.有问题就解决问题,无数次的实验,也许是解决问题的必由之路

以上回答你满意么?
嵌入式是做什么的
嵌入式系统通常是指内部包含只能控制器的装置,它具有整合度高,体积小、反应速度快、智慧化、 稳定及可靠性强等特点。

举一个简单的例子就能明白了

比如说我们的电脑都装有作业系统,因为安装了作业系统以后会使电脑的效用被充分的利用起来,但是 现在智慧化的装置、各种仪器、电子装置越来越多,比如说我们的手机、智慧洗衣机、智慧电冰箱等等 ,这些东西不可能把电脑用的作业系统安装在其中,只能开发一些体积小的、功能完备的小型系统安装 在这些东西上,被安装的这些作业系统就叫做“嵌入式的作业系统”
什么是嵌入式系统?
说白了目前有两个CPU硬体系列,

一是带电扇的CPU:目前的电脑,费电,发热大,效能高;

二是不带电扇的CPU:目前的手机,微控制器等。也就是嵌入式,省电,发热小。

其实只要是CPU都可以装作业系统的。只是有的硬盘太小了,装不下。或记忆体太小执行不了而已。

安卓是基于Linux核心,但不是Linux作业系统。

“Android是一种以Linux为基础的开放原始码作业系统,主要使用于便携装置。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android作业系统最初由Andy Rubin开发,最初主要支援手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩充套件到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月资料,Android占据全球智慧手机作业系统市场52.5%的份额,中国市场占有率为68.4%。”

“Android 是运行于 Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux 里支援的功能,Android 大都没有支援,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程式移到 userspace,使得Linux driver 与 Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所产生的,这样做是为了保留常数、资料结构与巨集。”

参考资料: ke./view/1241829#5_4
嵌入式 移植到底是什么? 5分
这个话题太大了,

要看你是移植什么了,可以是作业系统,可以是应用软体,甚至是一些编编译器。

你要先看你要做的是什么。

PC上的是交叉编译工具,这个交叉编译户具的作用,就是可以编译出可以直接在嵌入式平台上可以直接执行的程式。
嵌入式培养是什么意思?
嵌入式培养是什么意思?目前高校在招生的时候通常会提到嵌入式人才培养,也许你并不了解嵌入式是啥?其实就是常常谈到的嵌入式,主要说其应用,就是一个嵌入式Linux系统,是根据不同需求而开发的系统,不同一般的windows系统,需要那么大个头,例如当前的拿在手里的平板电脑,如果你还用桌上型电脑那样的系统,那么相对应的硬体一定不能小,功耗也大还得插电吧。可以想象一下,那最后做出来产品是没人要的!

国内第一家嵌入式人才培养机构是华清远见。那么嵌入式培养从字面意思上讲,显而易见就是嵌入式人才的培养,不管是大学里面的培养,还是毕业之后社会上的嵌入式培养都是培养你嵌入式开发的技能。其实就是这么简单的意思。

为什么要做嵌入式人才的培养?只因当前技术的潮流是奔着智慧时代、自动化发展去的。且从事嵌入式开发工作薪资待遇比起一般的打工者,算是大富大贵了!从2015年行业薪资来看,嵌入式开发是所有行业内平均薪资待遇最好的职业。也是国家大力扶持的热门行业。

中国目前来讲还算是发展中国家,远远落后欧美、日本这样的一些老工业强国,现在国家也是极力的向他们靠近,学习他们的先进技术,不得不说嵌入式技术就是非常重要的一环。打个比方,以前很多工厂的工人做一些工种都是手工的,需要大量的人,现在开发一台自动化装置,那么这些人都面临着失业,自动化之后效率变高,成本降低。

当前更是无人机、无人驾驶、可穿戴装置、智慧家居、智慧城市等相关产业不断涌现,嵌入式系统、基础晶片、各类感测器及软体的应用越来越加深入和广泛。所以嵌入式人才培养迫在眉睫。

华清远见教育集团(行业内最早、最大的嵌入式职业教育机构)总裁季久峰表示,在嵌入式人才培养上,应始终坚持“兴趣学习”的课程设计原则。嵌入式教学依靠单一的、过时的开发板的时代已经过去了,把当下新潮的硬体产品拿到课堂上来,才能够真正的激发学员的学习热情。华清远见集团拥有几十人的专业研发团队,目前已成功研发诸如开源平板电脑、智慧手表、智慧机顶盒、智慧小车、智慧手环等时下最流行的产品,并快速应用到课程内容和专案实训中,这样才能真正的帮助学员成长,提高实战能力。
嵌入式到底是什么?对51 msp430 stm32的基本使用都掌握。但是还是不太理解他们之间本质上
恩 我也是刚学系统的 ,说的不好不要见怪。

对于51 msp430 stm32等微控制器,就你现在情况来看还是在裸奔,没跑过什么作业系统。就作业系统而言按功能划分为工业和家庭之类的,有什么ucos FreeRTOS linux wince等等嵌入式作业系统。

优势方面:在系统上可以更加合理的分配资源,让资源利用尽可能的少浪费,做到多工化,bug少(毕竟系统神马的是一群牛逼的大大合力完成的,且进过时间的考验,肯定比我们裸奔强多了),且比普通微控制器系统更适合完成复杂的应用,还有点重要的是稳定性好,我们裸奔的程式搞大了,难免会有很多bug,用作业系统可以增加程式的稳定性,和高效性。

额 暂时写这么多 有问题你再问吧 。
我是大一软体工程嵌入式的,请问以后到底是什么方向
这个看你兴趣了,嵌入式属于搞开发的,现在很多方面都用到了,搞资料可能相对要枯燥些,毕竟都是和资料打交道
嵌入式 是做什么的?
嵌入式实际上是软体硬体相结合的嵌入式系统。

软体一般是一种计算机作业系统,比如Linux硬体则是执行使用者要求的执行装置,比如小电机,电路板等等。

做嵌入式开发,则分为软体开发和硬体开发两方面。

我现在的工作就属于嵌入式,是电视机的开发。

需要学习的有:

软体上至少要掌握一种作业系统比如Linux,一门程式语言比如C语言,还要掌握一些与硬体会话的汇编和编译原理等。

硬体方面至少要有电路基础。
嵌入式是什么意思?
1、简单的说就是用于控制、监视或者辅助操作机器和装置的装置。

2、可以理解为微型电脑。比如平板电脑就是一个嵌入式系统,智慧手机也是嵌入式系统,银行取款机也是.......可以说凡是能智慧互动控制的都是嵌入式系统。

3、打个比方说:拿一个嵌入式开发板,装上萤幕,就能成为平板电脑。装个温度探测器,就可以成为温度检测仪。装个萤幕+GPS模组,就能成为车载导航仪。装个读卡器+3G模组,就可以成为POS机......当然实际开发起来没有说的这么简单,会设计硬体开发+软体开发等各方面。
嵌入式 是什么
(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和装置的装置”。原文为:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。

嵌入式系统是一种专用的计算机系统,作为装置或装置的一部分。通常,嵌入式系统是一个控制程式储存在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的装置,如手表、微波炉、录影机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含作业系统,但大多数嵌入式系统都是由单个程式实现整个控制逻辑。[1]

从应用物件上加以定义,嵌入式系统是软体和硬体的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬体可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

热点内容
字节跳动公司的数据怎么存储 发布:2024-10-21 23:04:10 浏览:117
python模块如何安装 发布:2024-10-21 22:54:22 浏览:301
ip服务器哪里买 发布:2024-10-21 22:49:56 浏览:297
美女压缩包 发布:2024-10-21 22:24:04 浏览:319
c语言创建按钮 发布:2024-10-21 22:13:49 浏览:730
笔记本账户密码是什么 发布:2024-10-21 22:03:47 浏览:908
荣耀俱乐部怎么退回安卓 发布:2024-10-21 22:02:35 浏览:963
androidxmlmenu 发布:2024-10-21 22:00:35 浏览:390
安卓光遇截图保存在哪里 发布:2024-10-21 21:47:39 浏览:485
sqlservermd5加密 发布:2024-10-21 21:33:51 浏览:863