假设我有一个名为 的 C++ 文件dummy.cpp
,我需要用 g++ 编译它,使其来自标准输入,而 g++ 将编译后的二进制文件输出到标准输出。
如果只需要 stdin 部分,则以下命令可以解决问题:
$ g++ -x c++ -o dummy - < dummy.cpp
现在添加输出部分,据我所知,我们需要使用例如/dev/stdout
(或/proc/self/fd/1
)作为输出参数,但是它不会工作,因为它会因链接器错误而退出。
$ g++ -x c++ -o /dev/stdout - < dummy.cpp
/usr/bin/ld: final link failed: Illegal seek
collect2: error: ld returned 1 exit status
如果我通过它将它从终端重定向到一个文件g++ -x c++ -o /dev/stdout - < dummy.cpp > dummy
,它将正常工作。我想问题是标准输出是不可搜索的,当它通过管道传输到文件中时,它会“变成”。但是为什么 ld 文件是可查找的,并且可以以某种方式规避它?