【发布时间】:2010-10-21 02:57:06
【问题描述】:
我在从 Delphi 2006 迁移到 Delphi 2009 时遇到问题。使用 JVCL 的项目抱怨缺少 jvconsts.res。该文件肯定在那里。项目搜索路径包括文件所在的目录。 (注意:我的全局搜索路径中没有 JVCL 以使其更便携)
但是应该找到该文件,正如Delphi Help 所说:
"... 链接器搜索 .res 目录中的文件 [...] 在搜索路径输入框中指定 在目录/条件页面上 项目|选项对话框的"
这不是 JVCL 问题:一个简约的程序显示了这一点:
想象一下这个目录结构:
C:\Test\ResTest.dpr
C:\Test\Res\Test.res
这里是 ResTest.dpr:
program ResTest;
{$R test.res} // not found even if "c:\Test\Res" is in project search path
begin
end.
这在 Delphi 2006 中编译得很好,但在 Delphi 2009 中编译得不好。 经过一番搜索,我找到了一种告诉 Delphi 文件在哪里的方法:使用命令行编译器的 gobal 搜索路径或 -R 参数。
在我写这篇文章时,我更接近真正的问题:在 Delphi 2006 中,.cfg 文件包含以下行:
-I"c:\Test\Res"
-U"c:\Test\Res"
-R"c:\Test\Res"
基本上它将项目搜索路径中的值复制到 3 个命令行选项中,因此它确保 -R 参数具有正确的值。
在 Delphi 2009 中(我将编译器输出的详细程度设置为“调试”),我从 IDE 获得了生成的命令行:
如果项目搜索路径中包含目录(c:\Test\Res):
dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib" -R"c:\program files\codegear\rad studio\6.0\Lib" -UD:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib" -K00400000 ResTest.dpr
如果目录包含在全局搜索路径中
dcc32.exe --no-config -M -Q -ID:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -LE"C:\Users\Public\Documents\RAD Studio\6.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\6.0\Dcp" -O"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -R"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -UD:\Sources\Temp\1\Res;"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res -K00400000 ResTest.dpr
也许在这里很难看到:区别在于 -R 参数:
Local Search Path -> -R"c:\program files\codegear\rad studio\6.0\Lib"
Global Search Path -> -R"c:\program files\codegear\rad studio\6.0\Lib";D:\Sources\Temp\1\Res
所以难怪它为什么不起作用。 Delphi 2009中的-R参数没有附加本地搜索路径。
我会说,这显然是一个错误,但为什么似乎没有其他人有这个问题?我可以在我们使用的所有机器上重现它。也许该错误仅存在于德文版的 Delphi 2009 中?
【问题讨论】:
标签: delphi delphi-2009