为什么gcc链接动态库不需要导入库?

jtf198711 2011-07-05 07:41:39
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
...全文
798 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxun 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 jtf198711 的回复:]

意思就是compile & link的过程根本不需要指明dll的路径
对于vc,如果是静态链接方式 那么只要给个import library;如果是动态链接方式,连import library都省了
[/Quote]
难道gcc在编译链接时需要指定dll路径吗? 导入库和vc是一样的使用方式啊
动态加载方式,gcc也不需要导入库和dll。
xunxun 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jtf198711 的回复:]

引用 25 楼 xunxun1982 的回复:

引用 24 楼 akirya 的回复:
那还得动态加载啊

那么你的意思是?
如果你是说导入库的话,gcc也可以使用导入库,而不需要dll也可以编译出来


按照网上的说法 gcc下动态库的import library 是.so.a形式的,
但我在ubuntu上查了 找不到.so.a这样的文件,只有cygwin下会有这样的文件……
[/Quote]
cygwin/mingw也没有.so.a的 形式是dll.a这样的 linux下不需要导入库 ,gcc在windows下可以用dlltool(binutils)之类的工具可以造出来
jtf198711 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 akirya 的回复:]

VC下你不需要dll就可以编译出来,在某些dll保密的情况下,这样做很合适。(我曾经帮别人做一个东西的时候就遇到这种情况)

但GCC不行。

这属于考虑需求的不同出发点。
[/Quote]

恩 这个需求我倒没有想过 受教了
jtf198711 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 xunxun1982 的回复:]

引用 24 楼 akirya 的回复:
那还得动态加载啊

那么你的意思是?
如果你是说导入库的话,gcc也可以使用导入库,而不需要dll也可以编译出来
[/Quote]

按照网上的说法 gcc下动态库的import library 是.so.a形式的,
但我在ubuntu上查了 找不到.so.a这样的文件,只有cygwin下会有这样的文件,那也就是说在linux上gcc都不必使用导入库
jtf198711 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 xunxun1982 的回复:]

引用 21 楼 akirya 的回复:

VC下你不需要dll就可以编译出来,在某些dll保密的情况下,这样做很合适。(我曾经帮别人做一个东西的时候就遇到这种情况)

但GCC不行。

这属于考虑需求的不同出发点。

什么叫不需要dll就可以编译出来?
LoadLibrary和dlopen不都是动态加载吗?
[/Quote]

意思就是compile & link的过程根本不需要指明dll的路径
对于vc,如果是静态链接方式 那么只要给个import library;如果是动态链接方式,连import library都省了
mLee79 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 jtf198711 的回复:]
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
[/Quote]

这个是LZ说的.. 所以下面的导入库都应该是 import library...
xunxun 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 akirya 的回复:]
那还得动态加载啊
[/Quote]
那么你的意思是?
如果你是说导入库的话,gcc也可以使用导入库,而不需要dll也可以编译出来
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 xunxun1982 的回复:]

引用 21 楼 akirya 的回复:

VC下你不需要dll就可以编译出来,在某些dll保密的情况下,这样做很合适。(我曾经帮别人做一个东西的时候就遇到这种情况)

但GCC不行。

这属于考虑需求的不同出发点。

什么叫不需要dll就可以编译出来?
LoadLibrary和dlopen不都是动态加载吗?
[/Quote]

那还得动态加载啊
赵4老师 2011-07-06
  • 打赏
  • 举报
回复
《程序员的自我修养——链接、装载与库》
xunxun 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 akirya 的回复:]

VC下你不需要dll就可以编译出来,在某些dll保密的情况下,这样做很合适。(我曾经帮别人做一个东西的时候就遇到这种情况)

但GCC不行。

这属于考虑需求的不同出发点。
[/Quote]
什么叫不需要dll就可以编译出来?
LoadLibrary和dlopen不都是动态加载吗?
  • 打赏
  • 举报
回复
VC下你不需要dll就可以编译出来,在某些dll保密的情况下,这样做很合适。(我曾经帮别人做一个东西的时候就遇到这种情况)

但GCC不行。

这属于考虑需求的不同出发点。
ollydbg23 2011-07-06
  • 打赏
  • 举报
回复
呵呵,讨论还是很有价值的啊!
xunxun 2011-07-06
  • 打赏
  • 举报
回复
恩,说dll的时候默认windows系统,这样才可以放在一起讨论vc和gcc。
Linux下一般说dso或者直接说so
jtf198711 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 xunxun1982 的回复:]

引用 26 楼 jtf198711 的回复:

意思就是compile & link的过程根本不需要指明dll的路径
对于vc,如果是静态链接方式 那么只要给个import library;如果是动态链接方式,连import library都省了

难道gcc在编译链接时需要指定dll路径吗? 导入库和vc是一样的使用方式啊
动态加载方式,gcc也不需要导入库和dll。
[/Quote]

在linux上静态链接动态库,gcc需要知道so的路径,动态链接就不需要了。
在windows上,静态链接动态库的时候,gcc可以连import library或者直接链接动态库都行。

当然动态链接的话这些都不需要。
knief不懂就问 2011-07-05
  • 打赏
  • 举报
回复
这个真没认真考虑过
xunxun 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 mlee79 的回复:]

那你肯定没看LZ的帖子...
[/Quote]
lz没说动态导入吧,这个和链接库就无关了。
mLee79 2011-07-05
  • 打赏
  • 举报
回复
那你肯定没看LZ的帖子...
pathuang68 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mlee79 的回复:]

引用 8 楼 jtf198711 的回复:

引用 7 楼 pathuang68 的回复:

so的调用分静态调用和动态调用。
静态调用不需要导入库,动态调用则需要导入库的。


这个恰好跟vc相反哎 为啥会要这样设计?


没这回事,不管动态静态,.so都可以不用导入库. 实际上.dll也可以不用. 为嘛M$要用, 想不明白...
[/Quote]
俺说的动态导入的意思是要用到dlopen,比如handle = dlopen("动态库名.so", RTLD_NOW);这样。
xunxun 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pathuang68 的回复:]
你说的导入库是啥意思?
[/Quote]
导入库即动态库的符号链接库
pathuang68 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mlee79 的回复:]

引用 8 楼 jtf198711 的回复:

引用 7 楼 pathuang68 的回复:

so的调用分静态调用和动态调用。
静态调用不需要导入库,动态调用则需要导入库的。


这个恰好跟vc相反哎 为啥会要这样设计?


没这回事,不管动态静态,.so都可以不用导入库. 实际上.dll也可以不用. 为嘛M$要用, 想不明白...
[/Quote]
你说的导入库是啥意思?
加载更多回复(12)

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧