社区
工具平台和程序库
帖子详情
为什么gcc链接动态库不需要导入库?
jtf198711
2011-07-05 07:41:39
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
...全文
798
32
打赏
收藏
为什么gcc链接动态库不需要导入库?
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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也可以编译出来
珍惜生命远离CPP
2011-07-06
打赏
举报
回复
[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不都是动态加载吗?
珍惜生命远离CPP
2011-07-06
打赏
举报
回复
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)
MinGW5.1.4
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集
导入
库
的集合,允许你生成本地的Windows程序而不
需要
第三方C运行时
库
。 MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口
库
的...
mingw-get-inst-20111118
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集
导入
库
的集合,允许你生成本地的Windows程序而不
需要
第三方C运行时
库
。 MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口
库
的集合...
老生常谈C语言
动态
函数
库
的制作和使用(推荐)
函数的编译:使用
gcc
–c add.c -fPIC只编译不链
接
函数.c文件,分别生成函数的目标文件(例如add.o、sub.o、mul.o和div.o)。 函数的归档入
库
:使用
gcc
-o libdynamic.so $(objects) -share将目标文件归档入
库
。 ...
动态
链
接
库
dll,
导入
库
lib,静态链
接
库
lib
目前以lib后缀的
库
有两种,一种为静态链
接
库
(StaticLibary,以下简称“静态
库
”),另一种为
动态
连
接
库
(DLL,以下简称“
动态
库
”)的
导入
库
(ImportLibary,以下简称“
导入
库
”)。静态
库
是一个或者多个obj文件的打包,...
Linux系统使用
gcc
生成静态
库
和
动态
库
并使用
程序中使用静态
库
注意:对于自定义的静态
库
,main.c 还可以放在-L.和-lmyhello 之间,否则 myhello 没有定义。...
gcc
不是一个人在战斗,
gcc
背后其实有一堆战友,他们为
gcc
变得强大做出了巨大的贡献。
工具平台和程序库
24,855
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章