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,关于链接的选项,所有的条目如下,一定要寻求答案,自己挨个试试把:
Linker Options
object-file-name -llibrary -nostartfiles -nodefaultlibs -nost-
dlib -pie -rdynamic -s -static -static-libgcc -shared
-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