c++ - DOS-报错: Bad file number

标签 c++ cygwin c++builder

我有一个尝试使用 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/

相关文章:

c++ - Ceres 求解器 : unable to disable logging (google glog)

c++ - 如何将类型从 const char * 转换为 char *

Cygwin64终端: Undefined reference to `mbuf_remove`

c++ - 公钥完整性 - 中间人攻击

c++builder - 如何在 C++ Builder 中编写相当于 Delphi "is"和 "as"的代码?

c++ - 用于连接在线 REST 服务器的 REST API

c++ - 如何利用 sqlite 进行撤消/重做功能?

git - 在 cygwin 中使用带有 xargs 的子字符串

windows - 从 cygwin bash 成功克隆后,本地 Git 存储库不存在

c++ - Embarcadero Builder C++ XE5 数据执行预防编译器