社区
工具平台和程序库
帖子详情
为什么gcc链接动态库不需要导入库?
jtf198711
2011-07-05 07:41:39
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
...全文
1056
32
打赏
收藏
为什么gcc链接动态库不需要导入库?
在vc中用静态方式链接动态库,需要有.lib,即导入库,但是在gcc中却只需要相对应的.so文件就行了,这是为什么阿
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
Linux下g++编译与使用静态
库
和
动态
库
的方法
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态
库
(*.lib)与
动态
库
(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态
库
(*.a)与
动态
库
(*.so)的生成与使用方式是不同的。刚开始可能会不适应,但是用多了应该会习惯这种使用,因为步骤上并没有VS下配置那么繁琐。 下面就分别总结下linux下生成并使用静态
库
与
动态
库
的方法:(由于是C++项目,所以编译器用的g++,但是与
gcc
的使用是相通的) 首先是准备工作,把我们
需要
封装成
库
文件的函数的头文件与源文件写好,如下: //myAPI.h int ADD(int a,
静态
库
和
动态
库
的使用
关于静态
库
和
动态
库
的创建、调用。
动态
库
有:MFC
动态
库
、win
动态
库
等。
GNU工具集
导入
库
集合MinGW4.4
现在官网已经不提供4.6以前版本的下载,但是某些地方还是要用到4.4版本,比如QT4.8.4的mingw编译版本。
linux_dongtai_lib.zip_linux
动态
库
linux下
动态
库
生成和使用,详细介绍了
动态
库
的生成、步骤和命令选项等。
C++静态
库
和
动态
库
的
导入
导出demo
C++静态
库
和
动态
库
的
导入
导出demo
工具平台和程序库
24,860
社区成员
27,333
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章