Chinaunix

标题: 请教编译器命令语法 [打印本页]

作者: BetonArmEE    时间: 2009-04-27 14:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: BetonArmEE    时间: 2009-04-27 14:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: BetonArmEE    时间: 2009-04-27 14:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: zhangych    时间: 2009-04-27 22:02
标题: 回复 #1 BetonArmEE 的帖子
这两个本质是一样的吧,-L. -lfunc就是说库路径在本地,使用库libfunc.a的库啊
作者: zhangych    时间: 2009-04-27 22:05
cc -shared -fPIC -o libfunc.so func1.o func2.o

再问
cc -o test test.o -L. -lfunc

cc -o test test.o libfunc.so
有什么区别?

这个就有一定得区别了,第一个是静态编译,在代码运行时是直接调用代码运行的,而后面的是将动态库的调用编译到运行程序的,如果你的LIBPATH或LD_LIBPATH路径没有定义,就无法找到要使用的动态库libfunc.so文件,导致文件运行失败
作者: zhangych    时间: 2009-04-27 22:07
再问,当前目录下只有libfunc.a时
cc -shared -fPIC test.so test.o -L. -lfunc

cc -shared -fPIC test.so test.o libfunc.a
有什么区别?

再问,当前目录下只有libfunc.so时
cc -shared -fPIC test.so test.o -L. -lfunc

cc -shared -fPIC test.so test.o libfunc.so
有什么区别?


我忘了顺序了,你可以试验一下,我不记得编译器缺省使用的是哪个了,如果两个全在,好像缺省是用静态方式的。
作者: youshuang    时间: 2009-04-27 22:08
没有太多区别,不过是前者在能搜索到动态库的前提下,会先考虑使用动态库来链接。
比如在/usr/lib中同时存在libm.so和libm.a,第一种方式会链接libm.so。
所以一般的编译命令都采用前者。
作者: BetonArmEE    时间: 2009-04-28 10:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: BetonArmEE    时间: 2009-04-28 10:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: youshuang    时间: 2009-04-28 10:29
哪有强制使用链接动态库的参数!没听说过。
Linux识别二进制文件是通过文件的头部信息获取的,
所以你把so后缀改成什么都没关系。但是这时候不能使用默认的-lxxx的形式来默认连接动态库了。
因为gcc会使用这个so后缀来搜索。

其实我不明白你想问什么,呵呵
作者: BetonArmEE    时间: 2009-04-28 14:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: youshuang    时间: 2009-04-28 15:50
标题: 回复 #11 BetonArmEE 的帖子
哎!
有又能怎样?你打算在你的编译命令里面使用?你见过有人使用吗?那样毫无意义。
因为你在不指定static的时候就默认使用动态库,你还要那个选项有什么用?

你man一下gcc,关于链接的选项,所有的条目如下,一定要寻求答案,自己挨个试试把:

  1.        Linker Options
  2.            object-file-name  -llibrary -nostartfiles  -nodefaultlibs  -nost-
  3.            dlib -pie -rdynamic -s  -static  -static-libgcc  -shared
  4.            -shared-libgcc  -symbolic -Wl,option  -Xlinker option -u symbol
复制代码

作者: youshuang    时间: 2009-04-28 15:52
标题: 回复 #12 youshuang 的帖子
可能就是rdynamic这个选项
作者: BetonArmEE    时间: 2009-04-28 17:14
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2