C_and_CPP 板


LINE

翻了仿间不少的书 好像很少有书籍是介绍我想知道的(应该是我看得不够细) 这些书上大部分都介绍一些型别语法函式库流程控制结构类别之类的 但我想知道的是一个程式细节上是怎麽被编译而成。 因为我现在处理的专案无法用IDE去compile...更让我对一堆档案间 是怎麽产生obj,lib,以至於後面生出image完全搞不清楚。 举例来说,例如今天要产生一个叫PCH_platform的模组 里面的组成包函了 PCH_platform.c ,这个.c档里面include了一个PCH_platform.h 而我在 PCH_platform.c里面看到一只 PCIread_byte()的function... 可是这只.c档里面明明就没有包含这只function的定义以及宣告,.h档里面也没有宣告 就可以这样直接拿来用,请问到底是甚麽原理呢?虽然我猜可能跟lib有关 可是完全不晓得这只.c档是跟哪只.lib连结的。 同样的情形也发生在定义常数上...明明一个 PCI_REGaddr常数在.c档跟.h档都没有宣告 可是却也可以直接用~实在是完全搞不懂 (整个专案建置的环境是在cmd下nmake) -------------------------------------------------------------------------- 以前使用IDE的时候很方便,就建置个专案,把function放在不同的档案之间要 呼叫只要把xxx.cpp,yyy.cpp都拉进专案,然後别只档案要用再include一个 有宣告xxx.cpp以及yyy.cpp的function之header就好,导致现在要用cmd compile就不知道 怎麽拉function了。 所以我今天又做了一个小实验,我弄了 a.cpp,b.cpp,b.h,内容摘要方别是 a.cpp: #include "b.h" void main(){ int i = b(3); //使用别只档案的function } b.cpp: int b(int bb){ return bb+2; //定义 } b.h: int b(int bb); //宣告 第一次编译的时候,这三只是在同一个专案中,理所当然地build过了 接下来我把b.cpp从专案中remove,然後build code就不过了 会出现 "无法解析的外部符号 int b()"这种问题....这就是我不懂的地方 原来的想法是: compile分成 1.产生obj 2.link成可执行档 今天我虽然把b.cpp从专案中移除了,可是第一次build code所留下来的b.obj还在 照理说在link的阶段..a.obj应该去找到b.obj里面的int b()然後把她拉进来 形成执行档才对的阿...为什麽编译不会过呢?纠境~~在整个build的过程 IDE做了哪些事情?而在cmd底下我又该怎麽下命令将这三个档案成功build起来? 那是不是说,假如我把b.cpp建成一个.lib档,就... 1.不会有无法解析外部符号的问题 2.a.cpp不必去include b.h就可以用int b() 又假设正确的话...我又该如何把这个b.lib拉进来~让程式在bulid的时候去找到 b.lib呢? 问题实在很长 感谢耐心看完的板友~如果有像这样的问题的话,究竟有甚麽样的资源 可以参考呢? 希望各位前辈们可以替小弟指点迷津 m(_ _)m --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.196.245
1F:推 WalkingIce:你用哪个 ide? @.@ 02/21 05:40
2F:→ stenler:Visual C++ 02/21 09:11
3F:→ WPC001:一定有宣告, 你没找到而已, 不见得放在.h 02/21 09:24
4F:→ WPC001:你b.cpp没放在专案里, 他build时为何要去link b.obj? 02/21 09:25
5F:→ WPC001:除非你自行手动在编译选项的连结那边, 手动加入b.obj 02/21 09:25
6F:→ stenler:请问楼上..没放在.h也没放在.c...那有可能放在哪呢? 02/21 10:11
7F:→ stenler:我确定过该.h档没有再include别的.h档..另外如果我把b.cpp 02/21 10:11
8F:→ stenler:做成b.lib的话,那我该怎麽设定或下指令让a.cpp在link的时 02/21 10:12
9F:→ stenler:後找到b.lib然後去做连结呢? 02/21 10:12
10F:→ tsaiminghan:不能在该function上按右键找选单中的寻找定义之类的吗 02/21 10:32
11F:→ stenler:回楼上~就算找到定义 还是不知道main.cpp以及xxx.cpp的 02/21 10:41
12F:→ stenler:function间是怎麽link起来的...因为main包含的标头档以及 02/21 10:42
13F:→ stenler:main.cpp都没有该function的宣告..不过xxx.cpp有被做成一 02/21 10:43
14F:→ stenler:只lib..我猜main的cpp应该是用某种机制跟xxx.lib link起来 02/21 10:43
15F:→ stenler:只是怎麽连的不清楚@@ 02/21 10:43
16F:→ WPC001:没有神奇的不知名机制,一切都是科学化,这才是合理的语言 02/22 00:08
17F:→ WPC001:如果是要在code里头指定lib, 可以用#pragma来指定(VC) 02/22 00:09
18F:→ WPC001:但宣告的部分, 还是得宣告..尤其是C++, 型别检查非常的重要 02/22 00:10







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP