C_and_CPP 板


LINE

再次更新 询问其他朋友 得到的答案是可能是ccache造成的 我在编译之前先使用ccache --clear 就可以正常报错了 (懒人包:遇到的问题是 "程式码有错 但是编译会成功") 但是也只有这一次是正常报错 将程式改回正常状态 编译成功後 再次加入错误的程式码还是会编译成功 看来只能每次编译前都加ccache --clear? 但是清除ccache後编译速度很慢 而且感觉有点在避问题 请问有谁知道该如何修正这问题的吗? --------------------------------- 新增影片 https://www.dropbox.com/s/oadtso6opxzdkbg/make_error.mov?dl=0 开发平台(Platform): (Ex: Win10, Linux, ...) linux fedora16(32bit) 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) G++ 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) none 问题(Question): 最近在开发专案时发现 我上的linux有机会发生不正常编译的问题 例如我今天写好程式 也编译"成功" 但是运行後发现这是旧版本 原本以为是没有clean造成的问题 但是clean之後再次编译 运行後还是旧版本 这时候我直接在.cpp档中直接加入垃圾 例如 nvjenhj rjhsnk hbrieh 等等无意义的字串 这时候编译理论上会回报错误 但是很神奇的她编译成功了 而且运行後发现还是旧版本 因为程式码的空间是mount上去的 原本以为会不会有什麽同步上的问题 但是用cross-compiler(例如arm-linux-XXX mipsel-linux-XXX ba-linux-XXX) 来编译每一个都是正常回报错误 拿掉垃圾後每个cross-compiler都是编译成功 编译出来版本也正常 因此目前我排除mount的问题以及程式码本身的问题 但加回垃圾用g++编译还是会编译成功(实际上应该要失败) 後来问题追到makefile / mk 档上 後来发现只要改一个地方就可以修正这问题 如下: INCLUDE += -I$(SRC_DIR) INCLUDE += -I$(SRC_DIR)/AAAA INCLUDE += -I$(SRC_DIR)/BBBB 只要改成(如下) INCLUDE += -I$(SRC_DIR)/ INCLUDE += -I$(SRC_DIR)/AAAA INCLUDE += -I$(SRC_DIR)/BBBB 如上 只要多一个" / " 就可以解决 但是如果 多几个字元 例如 -I./$(SRC_DIR)/ 可能又会发生一样的问题 问题有点难以形容 询问主管也说没遇过 但这问题我已经是第3次发生了 每次发生都是改mk档 直到可以正常报错为止 但是因为不同的cross-compiler是吃同一份mk档 因此mk档的写法应该也没有问题 (有另外的mk档负责cross-compiler设定) 不知道有没有哪位大大可以说明一下原因以及真正解法 毕竟这是一个不确定因素 哪时候会在遇到也不知道 ps. 没办法换linux 因为是公司内部的linux没办法说换就换 预期的正确结果(Expected Output): 编译错误(没错 我是要编译失败) 错误结果(Wrong Output): 编译成功 程式码(Code):(请善用置底文网页, 记得排版) 有需要可以提供完整的makefile/mk档 以及编译框架的说明(站内信提供) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.55.46
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1486374019.A.A34.html
1F:推 nick5130: 先make clean再make试试看 虽然治标但是写个shell就好了 02/06 21:24
2F:推 nick5130: 如果project太大 我就会去删掉编出来的so或a或o 02/06 21:28
3F:→ nick5130: 问题应该是g++并不知道你的档案有更动 所以不会重编 02/06 21:29
4F:→ nick5130: 治本的方法要看看版上有没有人可以提供了 XD 02/06 21:29
5F:→ descent: makefile 可能没写好, 不过你的 makefile 好像很复杂, 02/06 21:40
6F:→ descent: 可能不好查 02/06 21:40
7F:推 herman602: 你是在编译Android SDK? 02/06 21:55
不是 是公司内部的library 不过因为必须要可以跨平台 所以同一份code也可以编android/ios/windows
8F:推 Bencrie: 直接下 make -B 强迫重编译 02/06 22:25
9F:→ whatai: 後来改成每次编译前都有clean还是一样 -B等等到公司测测 02/07 09:42
10F:→ whatai: 看看 02/07 09:42
make -B试过了也没有用 拍了部影片 应该比较可以看得懂问题所在 https://www.dropbox.com/s/oadtso6opxzdkbg/make_error.mov?dl=0 一开始程式码中就已经加入垃圾 接着make clean再make >> 编译成功 修改相关mk档 make clean再make >> 编译成功 再次修改相关mk档 make clean再make >> 编译失败(这才是我要的结果) 问题点在於每次mk档修改位址都不一样 但理论上除非语法错误 否则加入垃圾的程式无论如何都应该编译失败 但是前两次却是编译成功的 这会造成我无法判断新的程式是否有真的被编译 而不是不知道哪个版本的程式 而且开发/维护过程中也许不小心语法错误可能也不会发现 问过其他人 是说有可能是环境变数造成的 但应该都是使用预设 没去动到 另外我在想g++实际上是不是有其他暂存区会存放编译出来的.o档 因此在某些情形下会读到旧的.o才导致这问题的?? 还请其他好心的大爷们 救救我这可怜的小工程师阿 QAQ ※ 编辑: whatai (60.251.110.174), 02/07/2017 11:42:37 whatai:转录至看板 LinuxDev 02/07 11:54 ※ 编辑: whatai (60.251.110.174), 02/07/2017 11:57:28
11F:→ x000032001: 检查makefile跟萤幕上编译的东西是不是照你想的在跑 02/07 12:41
12F:→ whatai: 检查过了 没有问题 02/07 13:57
13F:推 yvb: 影片太模糊, 看不清楚 make 的过程发生了什麽. 02/07 20:16
14F:→ yvb: 至少把 make 过程, 所输出的文字内容, 呈现清楚吧... 02/07 20:17
15F:→ yvb: 谁知道错误的魔鬼, 藏在哪段文字的细节里... 02/07 20:18
16F:→ descent: 不是 g++ 的问题, 一定是 makefile 相依性没写好 02/07 21:41
17F:→ Schottky: 我也觉得是 Makefile 相依性写错造成的 02/08 08:45
18F:→ whatai: 相依性指的是? 02/08 09:38
※ 编辑: whatai (60.251.110.174), 02/08/2017 11:05:25 ※ 编辑: whatai (60.251.110.174), 02/08/2017 11:06:35 ※ 编辑: whatai (60.251.110.174), 02/08/2017 11:11:13
19F:推 descent: 你可以先把 ccache 拿掉试试看有无正常, 若是 makefile 02/08 13:37
20F:→ descent: 没写好, 应该还是有问题 02/08 13:37
21F:→ whatai: 现在是每次make之前都先执行ccache --clear 效果很好 02/08 14:40
22F:→ whatai: 故意写错的地方都有报错 而不是像之前一样有错但是可以编 02/08 14:40
23F:→ whatai: 而且编出来的东西还可以执行(可能是用ccache内的暂存.o档 02/08 14:41
24F:→ whatai: 但我想知道 是什麽原因导致这现象的 02/08 14:42
25F:→ yvb: 不知你们的 makefile 是怎样的内容, 是否可以 make V=1 之类, 02/08 20:13
26F:→ yvb: 看到编译时如何叫用ccache的详情, 看看传了什麽参数给ccache. 02/08 20:15
27F:→ yvb: 或者看看 ccache 的设定档, 看有没有 compiler check 的设定, 02/08 20:17
28F:→ yvb: 相关部分请参见 ccache online manual. 02/08 20:18
29F:→ whatai: Makefile并没有设定任何有关於ccache的参数或语法 是直接 02/08 20:29
30F:→ whatai: 呼叫g++ 02/08 20:29
31F:→ whatai: Ccache设定档我再研究看看 不过我没有root权限 可能要请MI 02/08 20:30
32F:→ whatai: S弄 02/08 20:30
33F:推 yvb: 那看看 which g++, 看看 g++ 是否 symbolic 到 ccache. 02/08 21:03
34F:→ yvb: 若是如此, 那改一下 PATH 让 g++ 指到 "真正的" g++ . 02/08 21:05
35F:→ yvb: 另外, ccache 可以设个人的设定档. 仍参见 manual. 02/08 21:06
36F:→ yvb: 刚再看了一下 ccache manual, 设定甚至可用环境变数. 02/08 21:09
37F:→ whatai: 感谢您~ 明天来试试 02/08 22:18
38F:→ bluesoul: 觉得是makefile的问题 02/09 17:31
39F:→ whatai: 研究了几个网页还是找不到ccache出错的原因... 02/10 10:17
40F:→ whatai: which g++的结果是/usr/lib/ccache/g++ 02/10 10:18
41F:→ whatai: 目前将makefile有关於$(GPP)的定义从g++改成/usr/bin/g++ 02/10 10:19
42F:→ whatai: 试了几次确定每次都可以正常编译 故意写错的地方也会报错 02/10 10:20
43F:→ whatai: 打算就先这样 ccache的问题就不管了.. 已经花太多时间在这 02/10 10:20
44F:→ whatai: 问题上了 都没办法好好工作 02/10 10:21
45F:推 yvb: 会因为 -I 後的写法而结果不同, 也许所用的 ccache 有 bug, 02/10 19:20
46F:→ yvb: 也许更新 ccache 版本会好? 或是有什麽特别, 奇怪的设定? 02/10 19:23
47F:→ bdvstg: 我忘了-d还是-n可以看执行时跑了哪些指令&参数 02/11 00:00
48F:→ bdvstg: 用用看 看跟你想的一不一样 应该会有帮助 02/11 00:01







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灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP