gcc链接g++编译生成的静态库和动态库的makefile示例
使用c++开发程序或者库时,将库提供给其他人使用。
然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同。
首先是静态库,以链接g++编译生成的libmylib.a为例子
mylib依赖于pthread,rt,math库,链接时必须放在mylib之后。
同时-Wl,--no-as-needed -ldl添加在末尾是必须的。
arm和x86有些不同,就是arm的gcc不会自动链接数学库math,需要手动添加链接。
CC=arm-linux-gnueabihf-gcc -std=c99
CCLDFLAGS= -L. -lmylib -lstdc++ -pthread -lrt -lm -Wl,--no-as-needed -ldl
#CC=gcc -m32 -std=c99
#CCLDFLAGS=-L. -lmylib -lstdc++ -pthread -lrt -Wl,--no-as-needed -ldl all:test test.o:test.c
$(CC) -I../inc/ test.c -c -o test.o test:test.o libmylib.a
$(CC) test.o -o test $(CCLDFLAGS) .PHONY: clean clean:
-rm test test.o -f
gcc链接g++生成的动态库示例:
libmylib.so库,使用g++编译时,静态链接了stdc++库(-static-libstdc++)。
CC=gcc -m32 -std=c99
#CC=arm-linux-gnueabihf-gcc -std=c99
CCLDFLAGS=-lstdc++ -L. -lmylib Root:root root.o:test.c
$(CC) -I../inc/ test.c -c -o root.o root:root.o libmylib.so
$(CC) root.o -o root $(CCLDFLAGS) .PHONY: clean clean:
-rm root *.o
gcc链接g++编译生成的静态库和动态库的makefile示例的更多相关文章
- [转]Linux下用gcc/g++生成静态库和动态库(Z)
Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10| 分类: linux | 标签:链接库 linux g++ gcc |举报|字号 订阅 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- 【转】Linux编译链接问题----静态库和动态库
Linux静态库和动态库的命名规则 静态函数库 静态库的名字一般是libxxx.a,利用静态库编译生成的文件比较大,因为整个静态库所有的数据都会被整合进目标代码中. a) 优点: 编译后,可执行文件不 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- 【转】Linux下gcc生成和使用静态库和动态库详解
一.基本概念 1.1 什么是库 在Windows平台和Linux平台下都大量存在着库. 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不 ...
- Linux下GCC生成和使用静态库和动态库【转】
本文转载自:http://www.cppblog.com/deane/articles/165216.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本 ...
- VC 静态库与动态库(三)动态库创建与使用_隐式链接
动态库分为二种,一种隐式链接,另一种显示调用.不论哪种动态库,本质都是运行时动态加载 隐式链接:程序运行时,由编译系统自动加载动态库,然后根据程序的引入表进行重定位,当程序退出时自动卸载动态库 显示调 ...
- GCC与静态库、动态库
GCC 常用指令 1 man gcc gcc工作流程例如: gcc hello.c 1234567891011121314 //***第一步***gcc -E hello.c >hello.i ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
随机推荐
- C# Timer执行方法
private void button3_Click(object sender, EventArgs e) { System.Timers.Timer t = new System.Timers.T ...
- bzoj2657: [Zjoi2012]旅游(journey)
求树的直径 真是太神辣 #include<cstdio> #include<cstring> #include<cstdlib> #include<algor ...
- Windows、Ubuntu双系统重装windows系统后grub引导的修复及默认启动项的修改
今天帮童鞋重装系统,他的电脑是Windows.Ubuntu双系统,需要重装的系统是windows,据说是因为很多游戏都只支持64位,要给换成64位的 = =... 于是我就帮他装了个wind ...
- 设计模式22---设计模式之解释器模式(Interpreter)(行为型)
1.讲解解释器模式 1.1解释器模式定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2解释器模式要点 解析器:把描述客户端调用要求的表达式, ...
- ios--绘图介绍
iOS–绘图介绍 绘制图像的三种方式 一. 子类化UIView,在drawRect:方法画图 执行方法时,系统会自行创建画布(CGContext),并且讲画布推到堆栈的栈顶位置 执行完毕后,系统会执行 ...
- auth tips
https://scotch.io/tutorials/easy-node-authentication-setup-and-local https://scotch.io/tutorials/upg ...
- 为什么你需要使用instancetype而不是id
四年前Clang添加了关键字instancetype,目的在于取代-alloc和-init等方法的返回类型id,那么使用instancetype到底比id好在哪里? instancetype宣言 不管 ...
- svs 在创建的时候 上传文件夹 bin obj 这些不要提交
svs 在创建的时候 上传文件夹 bin obj 这些不要提交 右键-去除版本控制并增加到忽略列表
- 解决dispaly:inline-block 遗留间隙的问题
今天做一个项目 .本来我打算是作成表格的 ,后来觉得太费事直接搞成一个div 里面直接放四个a ,然后我将a 设置成inline-block.刚开始还没发现任何间隙问题,(对了说到这里 博主给新手介绍 ...
- java '相等'的比较.
我们知道对于操作符 "==",如果比较的是原生类型(primitive type),表示的是 '值本身'是否相等;而对于引用类型(reference type),表示的是 '对象的 ...