定制动态链接和静态链接

来源:互联网 发布:大数据案例分析ppt 编辑:程序博客网 时间:2024/06/04 22:41

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:

  1. CFLAGS+=-DMYFLAG
  2. all:testapp
  3. testapp:test_all liba.so liba.a libb.so libb.a /
  4.                 test_static test_statica_staticb test_statica_dynamicb test_dynamica_staticb test_dynamica_dynamicb
  5. myliba.o:myliba.c
  6. mylib.o:mylibb.c
  7. test_all:main.c myliba.o mylibb.o
  8.         gcc -o $@ $^
  9. liba.so:myliba.o
  10.         gcc -shared -o liba.so myliba.o
  11. libb.so:mylibb.o
  12.         gcc -shared -o libb.so mylibb.o
  13. liba.a:myliba.o
  14.         ar -r liba.a myliba.o
  15. libb.a:mylibb.o
  16.         ar -r libb.a mylibb.o
  17. test_static:main.c
  18.         gcc -o $@ $< -L./ -static -la -lb
  19. test_statica_staticb:main.c
  20.         gcc -o $@ $< -L./ -Wl,-Bstatic -la -lb -Wl,-Bdynamic
  21. test_statica_dynamicb:main.c
  22.         gcc -o $@ $< -L./ -Wl,-Bstatic -la -Wl,-Bdynamic -lb
  23. test_dynamica_staticb:main.c
  24.         gcc -o $@ $< -L./ -Wl,-Bdynamic -la -Wl,-Bstatic -lb -Wl,-Bdynamic
  25. test_dynamica_dynamicb:main.c
  26.         gcc -o $@ $< -L./ -la -lb
  27. .PHONY:clean
  28. clean:
  29.         rm *.o *.a *.so test*
复制代码