Linux编译安装相关命令,下面以Linux安装MySQL工具为例进行说明,代码如下:
#连接符这是放入后台,是前一个正确执行,才会执行后一个
#Linux编译安装流程./configure?make?make?install(默认目录安装)
#./configure?--prefix=/usr/local/pcre?make?make?install(指定安装目录)
在Linux下面,如果要编译一个C语言头文件,,要使用GNU的gcc编译器,以一个实例来说明如何使用gcc编译器:
假设有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,只要在命令行下执行:
gcc -o hello hello.c
gcc 编译器就会生成一个hello的可执行文件;执行./hello,就可以看到程序编译后的输出结果"Hello Linux".
我用一个例子来告诉你怎么样在 C++ 里使用C的头文件/函数.
比方说我有一个C的头文件叫 c.h, C的源码文件叫 c.c,内容分别是
c.h:
#ifndef _ASDFD_INCLUDED_
#define _ASDFD_INCLUDED_
#include stdio.h
extern int test(int a);
#endif
c.c:
#include "c.h"
int test(int a)
printf("A = %d\n", a);
return a*a;
现在我想在c++中使用c.c中提供的函数test(),我的c++文件名字叫 a.cpp,那么里面跟C有关的部分就要用 extern "C" {} 大括号括起来,看看我的
a.cpp:
#include iostream
using namespace std;
extern "C"
int main()
b = test(b);
cout"b = "bendl;
return 0;
看到了吧,#include "c.h" 被 extern "C" {}括起来了.
然后是如何编译,先把C文件编出目标文件(.o)来
gcc -c c.c
你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别.
然后再编译C++文件,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在编译 a.cpp 的时候把C生成的 c.o也加上了. 然后生成 可执行的 hello, 运行
./hello
就可以看到
先编译出目标文件
gcc -c a.c b.c c.c
这时候你应该看到有 a.o b.o c.o了
然后创建库文件
ar cr libtest.a a.o b.o c.o
这三个目标文件就放入 libtest.a 这个静态库中了,然后编译C++程序 (你的C++程序应该已经按照我前面说的用 extern "C" 把C的接口都括起来了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -L/home/aaa/lib -ltest
就会生成可执行文件 my.exe了.
采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行.
linux下的交叉编译环境重要包括以下几个部分:
①对目标系统的编译器gcc
交叉编译环境的建立步骤
第二段:编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install.
第三段:配置linux内核头文件
配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
第四段:第一次编译gcc
首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install.这一步将生成一个最简的gcc.由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,所以呢需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可.
第五段:交叉编译glibc
这一步骤生成的代码是针对目标机cpu的,所以呢它属于一个交叉编译过程.该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在此时此刻呢要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径.
configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库.
第六段:第二次编译gcc
运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++.
运行make install.
到此为止整个交叉编译环境就完全生成了.
几点注意事项
Linux编译c++源文件使用的命令为g++,操作步骤如下:
#vim hello.cpp
书写源代码内容,如:
#include?stdio.h
int?main()
printf("hello?world\n"?);
return?0;
按ESC键,终止输入,用:wq命令保存,退出.
编译
#g++ -o hello hello.cpp
-o的意思是用来指定生成程序的名字
运行
#./hello
hello world
#
预处理对头文件、宏定义等进行处理,生成
.i
的默认文件,命令:gcc
-E
test.ctest.i