我有一个尝试使用 Borland C++ Builder 6.0 编译静态库的批处理文件
它是从 Borland make(使用 bpr2mak 创建的 makefile)调用的,它是从 .bat 文件调用的(用于使用 Visual Studio 和一些 Borland C++ Builder 遗留项目编译整个项目),它是从 bash shell 脚本调用的在 Cygwin 中运行。
当我直接从 Cygwin shell 运行 .bat 文件时,它运行正常,但是当它从使用 Boost::Process::launcher 调用 cygwin 的程序运行时,我收到此错误:
C:\ARQUIV~1\Borland\CBUILD~1\Bin\..\BIN\TLib /u bclibs.lib @MAKE0000.@@@<br/>
DOS-reported error: Bad file number<br/>
TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation<br/>
opening 'MAKE0000.@@@'<br/>
** error 1 ** deleting bclibs.lib
这是一个复杂的场景,但是只要我们需要构建需要为各种 Linux 发行版和 Windows 32 位和 64 位构建的软件包,就会运行这个调用 cygwin 的程序。
注意:这是唯一一个失败的 Borland 项目,另一个编译正常(它也是唯一一个使用 borland 的静态库,因此 TLib
工具可能存在一些问题。
最佳答案
问题是 TLib 不喜欢重定向他的输出 (seen here)也没有输入管道。通过使用 set_stdin_behavior
在 Boost::Process::launcher 中创建一个输入管道来解决
关于c++ - DOS-报错: Bad file number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168675/