[转]Linux下CodeBlocks的交叉编译
Sam一直是Makefile流,这些天需要移植一些游戏引擎模块。这些模块在其它嵌入式平台上是使用CodeBlocks编译的,Sam不想再去写Makefile。所以只好学习使用CodeBlocks交叉编译了。
与Makefile相同,CodeBlocks也需要提供交叉编译器,并指定include,library目录。过程如下:
0. 打开多个Code::Blocks 窗口 :
Settings->Environment中将:Allow only one runing instance去掉勾选即可。
1. 交叉编译器的设置:
Settings->Compiler and debugger... -->Global compiler settings
这里说的很明确,是编译器的设置。
已有的编译器通常会包含:GNU GCC Compiler. Inter C/C++ Compiler等。
我们需要为自己建立一个针对交叉编译环境的编译器。下面以MIPSEL为例:
1.1:创建:
按Copy Button. 输入新名字,如:BCM72xx_Compiler.(这是Sam使用的Broadcom编译器,CPU 为 MIPSEL架构)
1.2:指出交叉编译器所用编译器,链接器等。
选定:Toolchain executables(呵呵,这里说的多明白,toolchain的执行程序)
C compiler: mipsel-linux-gcc (其实这里填mipsel-linux-g++也可以,详见博文GCC,G++区别)
C++ compiler: mipsel-linux-g++
Linker for dynamic libs: mipsel-linux-g++
Linker for static libs: mipsel-linux-ar
Debugger:mipsel-linux-gdb (这个没用过,估计要架GDB Server)
Make program: make
1.3: 指出交叉编译器PATH:
与Makefile相同,你只使用mipsel-linux-gcc,系统会找不到这个可执行程序在哪,需要export PATH=...
在Toolchain executables中:在Compiler's installation directory.写入toolchain的目录。注意:这里通常不是指放置mipsel-linux-gcc的那个bin目录。而是bin上级目录(toolchain目录)
或者在Additional Patchs中放入bin目录。
这里有2个地方需要注意:
1.Compiler's installation directory:
这个目录是指:Toolchain安装的目录。 2. Additional Paths:
这里是指编译器所在目录。
差别如下:
1是指toolchain的安装目录,如:
/opt/toolchains/crosstools_hf_linux2.6_gcc_4.2_uclibc_nptl/
2则是指放置mipsel-linux-gcc的目录。
1.4: 指出Include,Library目录:
与Makefile相同,需要指出Toolchain include,library目录。供交叉编译器查找系统头文件以及系统库。
Search directories -> Compiler
写入toolchain include目录。
Search directories -> Linker:
写入toolchain library目录。
2. 项目编译相关设置:
再次说到与Makefile相同,项目也需要有自己专有的设定,例如:项目include目录(-I),library目录(-L),#define(-D)乃至编译选项如-g, -Wall. 编译什么库进来(-l)等。
2.1: 项目头文件目录:
右击项目,选Build Options. Search directions->Compiler。这里通常写入项目的头文件目录。等同于-I
2.2:项目库文件目录:
右击项目,选Build Options. Search directions->Linker。写入库文件目录。等同于 -L
2.3:#define
右击项目,选Build Options. Compiler Settings->#defines.可以写入,例如:LINUX_BCM. 相当于-DLINUX_BCM.
或者在Other Options中写入:例如:-fpic -shared, -EL(little endien)等。
2.4:编译选项:
右击项目,选Build Options. Compiler Settings->CompilerFlags:
2.5:需要链接的库文件:
右击项目,选Build Options. Linker Settings->Link libraies:添加需要的库。例如:pthread, dl等。
2.6: CFLAGS,LFLAGS:
Build Option,选定指定Build Target.
CGLAGS在Compiler Settings中Other Options:
LFALGS在Linker Settings: Other linker options.
3. 项目输出设置:
如Makefile一样,我们需要设置最终生成的对象是可执行程序?动态库?静态库? 以及目标文件放置地点。
右击项目,Properties...选择build targets:
Type:生成的类型(可执行程序?动态库?静态库?)
Output filename: 输入文件放置地点。
3.1工程编译新平台目标代码:
工程中通常会有Debug,Release 2个Build Target。
我们可以使用Proerties->Build Target->Duplicate工具Dump出我们所需要平台的Build Target。
例如:Broadcom_BCM7413_Rel:是指Broadcom7413的Release版本。
此时选择输入Type(可执行程序?动态库?静态库?))
Output filename: 输入文件放置地点。
Objects output dir: 中间文件目录。
之后选择Build Options。 选择对应Build Target。
指定本工程 CFLAGS, LFALGS(见前文)
以及Link的库(静态库可以带路径,动态库则不要带路径,路经在search directories中指定)
4. Build log中输入完整编译语句:
常常需要看到CodeBlocks所使用的编译语句是否我们想要使用的。可以如下设置:
Settings -> 选择对应编译器如: Broadcom_BCM7213_Compiler -> Other Settings
将选项Compiler Logging: Full command line
即可。
[转]Linux下CodeBlocks的交叉编译的更多相关文章
- Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读
环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...
- Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件
交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gd ...
- 在Linux下使用MinGW静态交叉编译带有zlib的libcurl(包括交叉编译openssl,即--cross-compile-prefix=i686-w64-mingw32- mingw)
在Linux下使用MinGW静态交叉编译带有zlib的libcurl libcurl是一个跨平台的.易用的.强大的网络库.在大部分Linux发行版中都有编译好的二进制包可供使用,Mac系统更是将其作为 ...
- Linux下获取arm的交叉编译工具链
转载请注明文章:Linux下获取arm的交叉编译工具链 出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...
- linux下mono播放PCM音频
测试环境: Ubuntu 14 MonoDevelop CodeBlocks 1.建立一个共享库(shared library) 这里用到了linux下的音频播放库,alsa-lib. al ...
- 嵌入式 Linux下永久生效环境变量bashrc
嵌入式 Linux下永久生效环境变量bashrc 1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到 ...
- linux下动态链接库解决方案(一)
1.c++无法直接调用用c写的动态链接库,如果调用的话可能需要用到一些交叉编译的知识: 2.在c++写的动态链接库无法被调用成功的反思: 在linux下,通常都是使用g++编译器("g++ ...
- Linux下Qt的安装与配置
参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...
- ARM&Linux 下驱动开发第一节(小试牛刀)
#include<linux/init.h> #include<linux/module.h> static int __init hello_init(void) { pri ...
随机推荐
- Sersync同步过滤.svn文件夹
Sersync同步过滤.svn文件夹 <filter start="true"> <exclude expression="(.*).svn(.*)&q ...
- 【python问题系列--2】脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
缩进错误,此错误,最常见的原因是行之间没有对齐. 参考:http://www.crifan.com/python_syntax_error_indentationerror/comment-page- ...
- js移动端tap事件封装
这几天做项目,发现移动端需要触摸事件,而click肯定是不行的,于是我对tap事件封装进行了搜索,找到了一篇文章,原文地址如下:http://www.jb51.net/article/50663.ht ...
- composer安装自己的包
composer的出现,使得PHPer可以像Java一样更加方便的管理代码.在composer没有出现之前,人们大多使用pear.pecl管理依赖,但是局限性很多,也很少有人用(接触的大多phper基 ...
- php编译错误:Cannot find OpenSSL's <evp.h>
yum install openssl openssl-devel ln -s /usr/lib64/libssl.so /usr/lib/
- isset() 与 empty() 的区别
PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...
- Java变量名命名规则
$ .字母.下划线开头都行,后面的可以是数字.字母.下划线: 匈牙利命名法.Camel命名法与Pascal命名法 匈牙利命名法:在Windows编程中使用非常普遍,由微软的一位匈牙利程序员提出.匈牙利 ...
- Golang: pprof
压测的时候,如果在应用包里加入runtime包,会对压测产生非常严重的干扰. 测试1:开启runtime包 [luwenwei@test-weishi01v ~]$ siege -c --time=1 ...
- Android Studio一直build、一直refreshing、一直buiding gradle project into的终极解决办法
打开我的电脑,打开C:\Users\用户名, 把红圈的文件夹都删了 如果AndroidStudioProjects文件夹里那些project都不重要,也可以跟红圈文件夹删了, 然后再打开android ...
- 修改某个UITextField的键盘的返回键类型以及监听键盘的高度变化,取到键盘动画退出弹出的时间,一起随着键盘顶出来或者压下去,
1.修改某个UITextField的键盘的返回键类型: [_bottomTextView setReturnKeyType:UIReturnKeyDone]; 1.1.textFied点击return ...