- 论坛徽章:
- 0
|
谢谢各位回复,我已经找到答案了。
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*
复制代码 源代码:
04_dynamic_with_static_link_test.zip
(2.58 KB, 下载次数: 135)
|
|