GCC与静态库、动态库
GCC 常用指令
1 |
man gcc |
gcc工作流程
例如: gcc hello.c
1 |
//***第一步*** |
-I 包含(相对路劲或绝对)路径下的头文件(或目录,下面指的是./include/ 目录)
1 |
gcc hello.c -I ./include/ |
指定目标(不是生成a.out)
1 |
gcc hello.c -I /include/ -o hello |
-g –用于gdb调试,不加此选项不能gdb调试
1 |
gcc hello.c -I ./include/ -o hello -g |
-Wall –显示更多的警告
1 |
gcc hello.c -I ./include/ -o hello -g -Wall |
-lstdc++ 用C++的方式去编译
1 |
gcc hello.cpp -lstdc++ -o hello |
-O 优化选项,1-3越高优先级越高
1 |
gcc hello.c -I ./include/ -o hello -g -Wall -O1 |
gcc参数小结:
-I 包含头文件路径
-L 包含库文件的路径
-l 库名 libxxx.so -lxxx
-O 优化选项,1-3级
-W 警告all显示更多
-g 用于gdb调试
静态库
命名规则 lib + 库的名字 + .a 例: libmytest.a
制作步骤
- 编译成.o文件 (gcc -c *.c)
- 将.o文件打包: ar rcs libmyrepo.a file1.o file2.o
- 将头文件与库一起发布(一般而言移动到/include/ 下)
使用静态库
1 |
gcc main.c -o main.app -I include/ -L lib/ -l mytest //-l 后面的名字掐头去尾,如libmytest.a ==> -l mytest |
优点:执行块,发布应用时不需要发布库
缺点:执行程序体积会比较大,库变更时需要重新编译应用
动态库
使用的时候临时加载进来
制作动态库
- gcc -fPIC xxxx.c 编译与位置无关的代码
- 将.o文件打包,关键参数 -shared
1 |
gcc -fPIC -c *.c -I ../include/ |
动态链接库的使用
将 libmytest.so 软连接到 /lib 下 (不推荐)
将库路径增加到环境变量LD_LIBRARY_PATH中
配置/etc/ld.so.conf文件 添加需要添加的 .so 文件的路径,执行 sudo ldconfig -v
优点: 执行程序体积小,库变更时一般不需要重新编译应用
缺点: 执行时需要加载动态库,相比静态库而言更慢;发布应用时需要同时发布动态库
GCC与静态库、动态库的更多相关文章
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...
- linux静态与动态库创建及使用实例
一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...
- Linux 静态库&动态库调用
1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...
- 转: gcc 指定运行时动态库路径
gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...
- Linux中创建和使用静态库&动态库
库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...
- 静态库动态库的编译、链接, binutils工具集, 代码段\数据段\bss段解释
#1. 如何使用静态库 制作静态库 (1)gcc *.c -c -I../include得到o文件 (2) ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库 ...
- 生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...
- windows库的创建和使用:静态库+动态库
windows库的创建和使用:静态库+动态库 一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...
- C++开发新版本vs使用旧版本vs编译的静态库动态库
关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...
- linux下 GCC编译链接静态库&动态库
静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 ...
随机推荐
- IO流处理文件读取到字节数组,再从字节数组读取到文件,Java实现
package cn.zhang.io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; impo ...
- Vue中Js动画 与Velocity.js 多组件多元素 列表过渡
Vue提供我们很多js动画钩子 写在tansition标签内部 入场动画 @before-enter="" 处理函数收到一个参数(e l) el为这个元素 @enter=" ...
- lemon
这本是一个技术博客网站 我却用来记录关于六月 就好像特别才不配你的特别一样 就好像以后要特别喜欢cos一样 就好像再特别的六月也会过渡到七月一样
- Cisco连接失败问题处理
连接公司的VPN时软件一直安装不上,试了几种方法,在此总结. 原文链接:http://www.itsystemadmin.com/error-27850-unable-to-manage-networ ...
- Ribbon使用及其客户端负载均衡实现原理分析
1.ribbon负载均衡测试 (1)consumer工程添加依赖 <dependency> <groupId>org.springframework.cloud</gro ...
- iphone对fixed模态框支持不太好,弹出窗口中滚动点击穿透的bug
iphone对fixed展现层中存在滚动内容支持非常不好, 尤其是背景页面产生滚动以后,输入控件就找不到了, 取消冒泡也不行,最后是这么解决的,可以参考 <style> .modeldiv ...
- MacOS最佳思维导图推荐-MindNode 7
思维导图软件哪个比较好呢?MindNode for mac下载一款功能简单,界面简洁,不用看教程都会用的思维导图软件.mindnode 7 mac版可随时随地记录自己的想法,让您从灵感入手,将奇思妙想 ...
- 吴裕雄--天生自然 JAVA开发学习:StringBuffer、数组
public class Test{ public static void main(String args[]){ StringBuffer sBuffer = new StringBuffer(& ...
- c语言中用简单方法对多维数组进行初始化
例:int array[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; 说明:a.由4*3可知,本二维数组包含12个元素,因此初始化时array[0][0] = 1 ,ar ...
- Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)
如何使用scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库,并把爬取的数据存储到相应的数据库中. 一.SQLite 1.修改pipelines.py文件加入如下代码 # ...