zoukankan      html  css  js  c++  java
  • [转]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

    即可。 

  • 相关阅读:
    【每日算法】C语言8大经典排序算法(2)
    C++虚函数与纯虚函数的区别
    C++ 运算符优先级列表
    【每日算法】C语言8大经典排序算法(1)
    C++中的友元函数和友元类
    二叉树前序、中序、后序遍历相互求法
    【转】运算符重载的例析
    从一个二级题来看成员函数重载运算符和友元函数重载运算符
    测试用例管理之 TestLink
    【转】关于LoadRunner的迭代
  • 原文地址:https://www.cnblogs.com/wowk/p/3288333.html
Copyright © 2011-2022 走看看