交叉编译参数 -I -L -l 详解
2015-12-29 14:52
288 查看
这里不管是你用gcc还是用arm-linux-gcc都是实用的。
当你下载一些freetype,libjpeg。你得先.configure,make make install 这里我主要讲一下一些参数怎么配置,具体怎么安装这些库文件,下篇文章将重点讲解。
这三个参数是很重要的。
--build=BUILD configure for building on BUILD [guessed]
/* 在哪个平台上进行编译,默认pc机,这里不用修改 */
--host=HOST cross-compile to build programs to run on HOST [BUILD] /* 编译出的文件运行在哪里,默认pc机 */
--prefix=PREFIX install architecture-independent files in PREFIX /* 安装的文件路径,自己指定 */
我习惯如下配置:
./configure --prefix=$PWD/tmp/ --host=arm-linux /* 是在当前路径下面创建了一个tmp文件目录,安装在tmp目录*/
make && make install
上面讲的是安装库文件,下面我们讲讲怎么运用这些库文件来编译我们的程序。
先讲讲arm-linux-gcc几个常用的参数
-I 指定我们程序所需的头文件所在的路径,也就是我们刚刚编译出来库文件里面的头文件路径
-L(大写) 指定我们程序所需的库文件所在的路径,也就是我们刚刚编译出来库文件里面的库文件路径
-l(小写) 指定我们所需要的库,
上面这三个参数是很重要的,一定要理解过来加以运用。
方法一:我们交叉编译的时候自己去指定所需要的库文件,头文件。
arm-linux-gcc -o jpg2rgb jpg2rgb.c -I /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/include -L /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/lib -ljpeg
上面这种方法实在是太麻烦了,不建议使用,除非你只用一次这个库文件或者头文件。
方法二:
这里我扩展一点知识,就拿交叉编译工具链来说,我们用arm-linux-gcc的时候虚拟机怎么能够识别,我们没有跟详细的交叉编译路径,这里我得说一下,我们把这个路径一般放在环境变量中区了,当编译器在usr/lib 这些里面找不到的的时候就回去环境变量中找。
上面我们写的程序使用arm-linux-gcc来编译的,但是需要运用到jpeg库文件,我们可以把这些库文件,头文件拷贝到交叉编译下面的库文件和头文件,这样编译器就可以在arm-linux-gcc下面找到头文件,库文件了。具体在交叉编译器那个目录下,这个自己琢磨,因为不同版本编译器的路径可能不一样。下面我列出常用的arm-linux-gcc-4.3.2的头文件和库文件的路径。
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include /* 头文件路径 */
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib /* 库文件路径 */
强调一下:复制库文件的时候加 -d 选项 就是保持链接关系。
当你下载一些freetype,libjpeg。你得先.configure,make make install 这里我主要讲一下一些参数怎么配置,具体怎么安装这些库文件,下篇文章将重点讲解。
这三个参数是很重要的。
--build=BUILD configure for building on BUILD [guessed]
/* 在哪个平台上进行编译,默认pc机,这里不用修改 */
--host=HOST cross-compile to build programs to run on HOST [BUILD] /* 编译出的文件运行在哪里,默认pc机 */
--prefix=PREFIX install architecture-independent files in PREFIX /* 安装的文件路径,自己指定 */
我习惯如下配置:
./configure --prefix=$PWD/tmp/ --host=arm-linux /* 是在当前路径下面创建了一个tmp文件目录,安装在tmp目录*/
make && make install
上面讲的是安装库文件,下面我们讲讲怎么运用这些库文件来编译我们的程序。
先讲讲arm-linux-gcc几个常用的参数
-I 指定我们程序所需的头文件所在的路径,也就是我们刚刚编译出来库文件里面的头文件路径
-L(大写) 指定我们程序所需的库文件所在的路径,也就是我们刚刚编译出来库文件里面的库文件路径
-l(小写) 指定我们所需要的库,
上面这三个参数是很重要的,一定要理解过来加以运用。
方法一:我们交叉编译的时候自己去指定所需要的库文件,头文件。
arm-linux-gcc -o jpg2rgb jpg2rgb.c -I /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/include -L /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/lib -ljpeg
上面这种方法实在是太麻烦了,不建议使用,除非你只用一次这个库文件或者头文件。
方法二:
这里我扩展一点知识,就拿交叉编译工具链来说,我们用arm-linux-gcc的时候虚拟机怎么能够识别,我们没有跟详细的交叉编译路径,这里我得说一下,我们把这个路径一般放在环境变量中区了,当编译器在usr/lib 这些里面找不到的的时候就回去环境变量中找。
上面我们写的程序使用arm-linux-gcc来编译的,但是需要运用到jpeg库文件,我们可以把这些库文件,头文件拷贝到交叉编译下面的库文件和头文件,这样编译器就可以在arm-linux-gcc下面找到头文件,库文件了。具体在交叉编译器那个目录下,这个自己琢磨,因为不同版本编译器的路径可能不一样。下面我列出常用的arm-linux-gcc-4.3.2的头文件和库文件的路径。
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include /* 头文件路径 */
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib /* 库文件路径 */
强调一下:复制库文件的时候加 -d 选项 就是保持链接关系。
相关文章推荐
- 将 gitblog 的博客内容搬迁到 CSDN
- 欧几里得算法与最大公约数
- 安卓WebView Failed to request GL process. Deadlock likely: 0
- Curl命令
- iOS collectionView实现瀑布流
- AESUtil AES加密工具类
- soap中的几个概念及其关系
- 【LVL1_7_c】【思考题】【2】什么是溢出?什么是内存泄漏?
- Spring 官网jar下载
- Spring 官网jar下载
- CentOS 6.5 GDM 非root用户自动登陆
- 集成短信验证码--Mob.com
- 有意思网站集锦
- postgresql AutoVacuum系统自动清理进程
- 程序员的发展
- Spring 官网jar下载
- MD5加密数据
- 清除XCode缓存和生成文件
- Cut命令
- 转载文章列表