Cygwin 中的 Make/Execvp 错误:
在尝试进行增量构建时,make 中出现以下错误:
make[2]: execvp: C:/path/to/compiler.exe: 消息太长
我怀疑我的问题是 execvp 的参数长度。 知道那个限制是什么吗? 人们将如何改变这一现状呢?
一些奇怪的额外信息:当以前的 make 依赖项位于名称较短的文件夹中时,相同的命令会成功。 execvp 可用的内存量是否受到先前命令的影响?
例如,从增量构建文件(其中有数百个)的路径中删除 17 个字符可以节省大约 12k 字符,并且编译器的 6k 字符命令行会成功。 如果不减少该路径,同一命令行就会失败。
The following error occurs in make, while trying to do incremental builds:
make[2]: execvp: C:/path/to/compiler.exe: Message too long
I suspect my problem here is the argument length for execvp. Any idea what that limit is? How would one go about changing that?
Some curious extra information: the same command succeeds when previous make dependencies are in a folder with a shorter name. Is the amount of memory available to execvp dependent somehow affected by previous commands?
E.g. chopping 17 characters off the path to the incremental build files (of which there are hundreds) saves about 12k characters, and the 6k char command line to the compiler succeeds. Without reducing that path, the same command line fails.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Windows 中的 CreateProcess() 具有以下限制:
1) pCommandLine [输入、输出、可选]
2) 如果进程的环境块总大小超过 32,767 个字符,则此函数的 ANSI 版本 CreateProcessA 将失败。
我遇到了由限制2)引起的类似问题,但没有找到好的解决方案。 使用对 CreateProcess() 的 Unicode 调用重新编译 cygwin 可能会有所帮助。 对我来说,从环境中移除一些东西就足够了。
克日什托夫·诺瓦克
CreateProcess() from Windows has the following limitations:
1) pCommandLine [in, out, optional]
2) The ANSI version of this function, CreateProcessA fails if the total size of the environment block for the process exceeds 32,767 characters.
I had similar problem caused by limitation 2) but no good solution has been found. Probably recompiling cygwin with Unicode calls to CreateProcess() would help. For me it was sufficient to remove something from environment.
Krzysztof Nowak
我收到此错误是因为我的 %PATH% (取自 $PATH)太长。
I'm getting this error because my %PATH% (which is taken from $PATH) is too long.