【发布时间】:2021-02-27 14:10:12
【问题描述】:
我们正在尝试按照自述文件中的说明编译this。我必须说,我们根本不是 C 方面的专家,我们是 Web 开发训练营的学生,正在努力完成我们的最后一个项目。
它是一个命令行工具,可以计算多个天体的星历,你可以在readme文件的设置中看到,它需要从网上下载一些数据,然后编译。
一切都通过setup.sh 脚本完成。
所以,我们试过了:
- 在 Windows 10 ubuntu WSL 终端中
如果我们输入$./setup或$./prettymake,下载数据后会报错:
$mkfifo: cannot create fifo 'stderr': Operation not supported
$mkdir -p obj obj/argparse obj/coreUtils obj/ephemCalc obj/listTools obj/mathsTools obj/settings
cc -Wall -Wno-format-truncation -Wno-unknown-pragmas -g -c -I /mnt/d/reboot/ephemeris-compute-de430/src -O3 -D DEBUG=0 -D MEMDEBUG1=0 -D MEMDEBUG2=0 -fopenmp -D DCFVERSION=\"2.0\" -D DATE=\"09/06/2019\" -D PATHLINK=\"/\" -D SRCDIR=\"/mnt/d/reboot/ephemeris-compute-de430/src/\" src/ephemCalc/constellations.c -o obj/ephemCalc/constellations.o
如果我们使用$sudo ./setup 执行此操作,打印的错误是:
$mkfifo: cannot create fifo 'stderr': Operation not supported
$cat: stderr: No such file or directory
$mkdir -p obj obj/argparse obj/coreUtils obj/ephemCalc obj/listTools obj/mathsTools obj/settings
cc -Wall -Wno-format-truncation -Wno-unknown-pragmas -g -c -I /mnt/d/reboot/ephemeris-compute-de430/src -O3 -D DEBUG=0 -D MEMDEBUG1=0 -D MEMDEBUG2=0 -fopenmp -D DCFVERSION=\"2.0\" -D DATE=\"09/06/2019\" -D PATHLINK=\"/\" -D SRCDIR=\"/mnt/d/reboot/ephemeris-compute-de430/src/\" src/ephemCalc/constellations.c -o obj/ephemCalc/constellations.o
- 在 macOS 终端中
如果我们输入$./prettymake,会报错:
$mkdir -p obj obj/argparse obj/coreUtils obj/ephemCalc obj/listTools obj/mathsTools obj/settings
cc -Wall -Wno-format-truncation -Wno-unknown-pragmas -g -c -I /Users/rominaelorrietalopez/Documents/Descargas2/ephemeris-compute-de430-master/src -O3 -D DEBUG=0 -D MEMDEBUG1=0 -D MEMDEBUG2=0 -fopenmp -D DCFVERSION=\"2.0\" -D DATE=\"09/06/2019\" -D PATHLINK=\"/\" -D SRCDIR=\"/Users/rominaelorrietalopez/Documents/Descargas2/ephemeris-compute-de430-master/src/\" src/argparse/argparse.c -o obj/argparse/argparse.o
$clang: error: unsupported option '-fopenmp'
$make: *** [obj/argparse/argparse.o] Error 1
我们尝试了某些无济于事的事情,例如授予权限等等,但不知道下一步该做什么。
好像和prettymake文件有关:
mkfifo stderr
cat stderr | sed 's/\(.*\)/\1/' &
make $@ 2>stderr | sed 's/\(.*\)/\1/'
rm stderr
这就像它试图创建一个管道来保存编译的错误但不知何故它失败了。 还可能值得一提的是,它有一个关联的 Makefile。
由于 github 项目没有问题,我们已经通过电子邮件联系了创建者,但是我们认为也许有人可以在这里帮助我们。
任何形式的帮助都将不胜感激,谢谢。
【问题讨论】:
-
“MAC ubuntu 终端”是指 macOS 终端应用程序(与 Ubuntu Linux 没有特别的关系)吗?
-
我看不出
prettymake的意义。对我来说,这只是make 2>&1的一种过于复杂的形式。只需使用make。 -
@GiovanniZaccaria 测试,在 windows WSL 中它给出了相同的错误,
mkfifo: cannot create fifo 'abcd': Operation not supported,在 mac 作品中。 -
使用 WSL2,或设置 Linux 虚拟机。
-
WSL 对
mkfifo的支持显然有点粗糙。例如,请参阅github.com/microsoft/WSL/issues/3195。我同意@prog-fh 的观点,即prettymake脚本看起来毫无意义,而且一个简单的make 2>&1在几乎所有方面都会更好(包括不使用mkfifo)。由于包的setup脚本可能运行prettymake,最简单的方法可能是将后者的内容替换为上述make 2>&1。
标签: c bash windows-subsystem-for-linux