您的位置:首页 > 其它

定制动态链接和静态链接

2011-01-10 16:47 274 查看
http://linux.chinaunix.net/bbs/viewthread.php?tid=1176141

谢谢各位回复,我已经找到答案了。

QUOTE:
1,库文件名为什么非要相同,不同文件名即可以解决问题

2,动态库和静态库的执行效率几乎相同,完全可以选 ...

bekars 发表于 2010-12-24 13:21



是可以用不同的文件名字,但是我的目的是想要知道根本的原因,而不是解决问题就行了。

至于为什么这么做,因为我目前做的一个项目中,需要连接一个库,这个库是他们提供的,在安装交叉编译环境的时候自动生成了lib*.so和lib*.a两种版本,这样我怎么能改个名字就行呢?

原来-Bstatic和-Bdynamic这两个链接器选项需要用gcc的-Wl,option来传递才行。

我最新写的Makefile和源代码.

Makefile:

CFLAGS+=-DMYFLAG

all:testapp

testapp:test_all liba.so liba.a libb.so libb.a /

test_static test_statica_staticb test_statica_dynamicb test_dynamica_staticb test_dynamica_dynamicb

myliba.o:myliba.c

mylib.o:mylibb.c

test_all:main.c myliba.o mylibb.o

gcc -o $@ $^

liba.so:myliba.o

gcc -shared -o liba.so myliba.o

libb.so:mylibb.o

gcc -shared -o libb.so mylibb.o

liba.a:myliba.o

ar -r liba.a myliba.o

libb.a:mylibb.o

ar -r libb.a mylibb.o

test_static:main.c

gcc -o $@ $< -L./ -static -la -lb

test_statica_staticb:main.c

gcc -o $@ $< -L./ -Wl,-Bstatic -la -lb -Wl,-Bdynamic

test_statica_dynamicb:main.c

gcc -o $@ $< -L./ -Wl,-Bstatic -la -Wl,-Bdynamic -lb

test_dynamica_staticb:main.c

gcc -o $@ $< -L./ -Wl,-Bdynamic -la -Wl,-Bstatic -lb -Wl,-Bdynamic

test_dynamica_dynamicb:main.c

gcc -o $@ $< -L./ -la -lb

.PHONY:clean

clean:

rm *.o *.a *.so test*

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: