作者tinlans ( )
看板C_and_CPP
标题Re: [问题] 到底lib是什麽呢?
时间Thu Apr 30 02:46:56 2009
※ 引述《QQ29 (我爱阿蓉)》之铭言:
: 我没有自己写过lib或是dll
: 而我一直有自以为对的一个观念就是
: .h和.cpp .cpp可以换成lib
: lib就是.cpp , 实作的包装.... 但其实要我解释 lib到底是什麽我也不知道
: 他先把CPP 作成lib 是把cpp档案textfile 作了什麽事呢??
: 我试着google一下 看比较general解释 都不太解释我想问的这个部份
: 想请版友给点指点~~
计概课本会告诉你,
纯文字的程式码经过 compile 以後变成 object file,
把一个或多个 object files 做 linking 之後就会变成 executable file。
static lib 其实就是很多 object files 的 archive,
也就是把一堆编译出来的 .obj (或 .o)档封在一个档案里,
这样你在 linking 的时候只要指定一个 lib 档而不需要指定一堆 objec files。
: 然而dll更是我完全没碰过的东西
: 我只知道我执行程式时 要把该用的dll摆好 而dll在compile time是没有关系的..
: 也是google了一下 知识+之类的 解释的让我更不懂了
: 有提到什麽许多程式共用的XXXXX (不知道是什麽...)
: 那如果共用 不会造成race condition或是什麽之类的怪事情嘛?
共用 text section 并不会有什麽问题,
因为那个地方本来就不允许在 runtime 被写入新值,
而且里面的 code 一般会被编译成 position independent code,
所以存取资料上也不会发生奇怪的问题。
: 一般写程式 我就没有碰过真的需要自己写dll这件是 导致我真的对这一无所知
: 只知道她好像是run time程式会去跟他作某些事情....
: 请大家给一点正确的观念好嘛.....
: 是什麽必要 会需要去写dll呢?
可以共用 text section 的意义当然就是省 memory,
另外一个就是为了弹性,
不过怎麽做到弹性这点就真的说来话长了,
建议你自己动手玩过 DLL 以後再来问进一步的问题。
物件导向的技术也能用在 DLL 上,
比方说 header 只有 base class,
dervied classes 被实作在 DLL 内,
设计核心部分的人只需要以多型的方式利用物件即可,
元件导向的程式开发模式也常会用这种技巧;
不过你想在 Windows 上玩这招可能还会遇上一些问题,
特别是跨 DLL 用 new/delete 可能会有事,
但现在讲这些可能也太早了。
--
Ling-hua Tseng (
[email protected])
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://www.tinlans.org
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.115.183
1F:推 VictorTom:小弟我才他google到的.dll共用应该只是解释一般人使用上 04/30 03:03
2F:→ VictorTom:.dll的运作看起来是共用的, 而不是code/binary的内容@@" 04/30 03:03
3F:推 QQ29:请教一下 您说static lib 其实就是很多object files的archive 04/30 03:18
4F:→ QQ29:意思是说不是一个.cpp变成一个lib而是可以全部变成一个lib? 04/30 03:19
5F:→ QQ29:另外看了一下您的网页....您六岁就开始接触程式= =太神了吧 04/30 03:22
6F:→ sunneo:tinlans等级颇高的 04/30 04:01
7F:→ MOONRAKER:几岁开始不重要啦 以前因为电脑没什麽好玩 所以要玩电脑 04/30 04:42
8F:→ MOONRAKER:就一定要写程式 重点是後来怎样 这可不是我在酸 04/30 04:43
9F:→ MOONRAKER:我小时候也玩某种仿水果电脑 可是现在混得太烂所以没啥 04/30 04:45
10F:→ MOONRAKER:好讲的 -_- 04/30 04:45
11F:→ sunneo:我小时候也是用qbas/etbas写了简易的战车游戏 04/30 04:47
12F:→ sunneo:不过程式码丑毙了 全都挤在同一个bas 还goto了一堆 04/30 04:48
13F:→ sunneo:最後就连维护都很懒了 04/30 04:48
14F:→ sunneo:csse的`怎麽知道适不适合走程式这条路`的答案是维持的动力 04/30 04:50
15F:→ sunneo:不过看最近新闻...国小作机器人 还有以前某个写ga组合midi 04/30 04:52
16F:→ sunneo:倒是蛮令人惊奇的... 04/30 04:52
17F:推 sunneo:资料共用在nt以上应该都不会是预设 95/98才是 04/30 05:01
18F:推 VictorTom:国小写控制机器人那些似乎是有现成的套件的样子喔@_@" 04/30 10:28
19F:→ VictorTom:不过小小年纪就可以把逻辑/控制搞清楚实作出来也不简单. 04/30 10:29
20F:→ VictorTom:话说, QB里不是本来很多地方就在goto的吗?_? 04/30 10:29
21F:→ MOONRAKER:QB有比较decent的function/sub了 ETBAS是GWBASIC那一期 04/30 10:54
22F:→ MOONRAKER:的,没有这些近代的program unit,不是goto就要靠gosub 04/30 10:54
23F:推 VictorTom:啊对不起, 我搞错了, 我说的应该是BASIC, 那个还可以自 04/30 13:13
24F:→ VictorTom:己打行号: 10 xxxx 20 xxxx 30 xxxx 的那个Orz 04/30 13:14
25F:→ tinlans:每个 .cpp 可以各自变成 .obj,这些 .obj 可收成一个 lib 05/01 14:46