今天朋友的代码让我编译一下,他之前是可以编译成dll的,而我电脑上尝试过多次都是一样的错误。
错误样式:
1.
could not create or open file 'c:\docume~1\admini~1\locals~1\temp\em32T.h'
create of executable file failed
2.
---------- Linker: Errors (08:47:33)
---------- Finished Errors (08:47:33)
3.

Codegen compilation error

我的按提示找到log文件查看,有类似cannot的提示行。打开是c代码,看不懂意思

C:\TEMP\cgr5c2qt.c(64708) cannot convert argument 1 defined in: C:\TEMP\cgr5c2qt.c(64708) (col 23)

网上很多答案,罗列一下:
1. 不选择speed优化选项。
2. pb9遇到过此问题.解决的办法是,打上高版本的补丁就好了。
3. 应用程序的ico图标用了绝对路径了,请使用相对路径。
4. 在C:\下建立一个temp目录,把系统环境变量的temp 和 tmp都指向这个目录。
5. 重建一个工程再编译。
6.  blob(ls_anystring ,EncodingUTF8!),只要带上任何encoding都不行。
7. 有一个图片不存在的原因造成的(备注:图片不存在其实会弹出提示,而不是日志中显示失败)。
8. 代码中是否有try catch..之类的,注释掉。
9. 用了connectobject或它的子类。
10. 对象在一个pbl中太多,分开多个pbl.
对比检查,都没有上述问题,因为从朋友那拿过代码并未任何修改。也未增加什么。

尝试在一台旧电脑xp上面安装12.5 2511,编译,时间比较久,但是没有任何报错就编译成功了。包括上面说的tmp,temp目录都是xp系统默认的。

所以的所以,遇到此问题,可以尝试:a。换一台很干净的电脑,安装pb并进行编译;b。尝试安装一个新的补丁版本进行编译。

**另外对比发现,win7这台如果点右键build runtime勾选machine+full,如果pbl比较小也是可以编译dll成功的,而且时间较短,但是文件太大就需要一两小时,而且和直接编译exe时,产生一样的错误提示。我想问题就应该出现在这里。(我猜在win7上面如果拆分pbl,让它变小一些或许可以,而xp上面则pbl稍大也能通过,环境不同。)

**继续研究

把这个编译不通过的pbl中的对象逐个move到其他的pbl中。最后剩余一个对象比较大,大约是1M字节,在win7 12.5 3072编译不通过,报错误3. 在xp 12.5 2511上面可以编译通过。编译后dll文件是6M多。

继续。把xp也补丁成3072,报错误2,看来和补丁版本有关系。

卸载pb,重新安装2511,奇怪了,居然还是报错2。

卸载pb,删除整个安装文件夹,重新安装2511重启。编译,又能编译了。只是这个对象就要一个小时,足见,对象太大造成了编译的很大困难。但有次得出结论和补丁有关系,和环境也有一些关系。

如果曾经编译成功的人肯定积累了相当的经验。如果初次使用就失败,就改用pbd吧。