gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
来源:互联网 发布:ubuntu mate中文指令 编辑:程序博客网 时间:2024/06/15 13:15
转自gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
首先 --whole-archive 和 --no-whole-archive 是ld专有的命令行参数,gcc 并不认识,要通gcc传递到 ld,需要在他们前面加-Wl,字串。
--whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,--no-whole-archive 则关掉这个特性。
比如你要把 liba.a libb.a libc.a 输出到 libabc.dll(或libabc.so)时应该这么写:
libabc.dll:liba.c libb.a libc.a
gcc -shared -o $@ -L. -Wl,--whole-archive -la -lb -lc -Wl,--no-whole-archive
在--whole-archive作用下的库里不能有函数同名。
下面有一个包含Makefile 和c的完整例子:
#dllMakeall:ap libexe=main.exedll=libabc.dlllib:$(dll)ap:$(exe)src=mainsa = a b c$(exe):$(src:%=%.c) $(dll) gcc $< -labc -L. -o $@$(dll):$(sa:%=lib%.a) gcc -shared -o $@ -L. -Wl,--whole-archive $(sa:%=-l%) -Wl,--no-whole-archivelib%.a:%.o ar rcs $@ $<%.o:%.c gcc $< -g -c -o $@ clean:# -rm $(sa:%=%.o)# -rm $(src:%=%.o) -rm $(sa:%=lib%.a) -rm $(dll) -rm $(exe)
//a.c#include <stdio.h>int func_a(int arg1){ printf("a %d\n" , arg1); return 25*arg1;}int samefun() { printf("%s in %s\n", __FUNCTION__ , __FILE__ ) ;} // b.c#include <stdio.h>int func_b(int arg1){ return 2*arg1;} // c.c#include <stdio.h>int func_c(int arg1){ return 3*arg1;} //main.c#include <stdio.h>int main(){ int arg = 412; int res ; printf("start\n"); res = func_a(arg)+func_b(arg)+func_c(arg); printf(" %d => %d \n" , arg , res ); samefun(); return res;}
0 0
- gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
- gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
- gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
- gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
- rdynamic和-whole-archive
- gcc链接参数--whole-archive的作用
- gcc链接参数--whole-archive的作用
- 76.Which statement is true about a whole consistent database backup on a database running in ARCHIVE
- Xcode4.3 Archive和发布中的错误
- Parajumpers Herre the whole body has no
- No Archive Mode <-> Archive Mode
- JApplet中的參數——codebase、code和ARCHIVE
- archive
- archive
- archive
- Archive
- exploded archive(development mode) 和Packaged Archive(production mode)
- exploded archive(development mode) 和Packaged Archive(production mode)
- 如何使用PDF转ppt转换器将PDF文件快速转换为ppt
- 菜鸟学android——程序优化:需要释放的资源
- Java线程与Linux内核线程的映射关系
- Swift源码分析----swift-proxy与swift-account(2)
- Xtend:Android平台的Swift语言
- gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
- MongoDB:Map-Reduce
- 啊哦,会这样的啊
- HTML5 canvas创建粒子效果
- ScrollView中嵌入ViewPager,ViewPager的左右滑动冲突问题
- hdu1066
- 修改ListView 分割线Seperator line
- js 要弄懂的东西
- centos下SSH无密码访问(非22端口)