跨平台使用system()。使用cygwin和g++编译。

3
我正在使用Windows 7下的cygwin和g++编译我的项目。我已经制作了一个makefile来在Ubuntu下编译该项目。目前一切都正常工作。
一个函数调用Libre Office来转换一些文件。为此,我将一个命令字符串传递给system()症状 当我使用cygwin生成的可执行文件时,会出现错误:
sh: C:\..\LibreOffice 3.6\program\soffice --headless --convert-to png:'draw_png_Export' add1.fodg : command not found

让我感到烦恼的是,似乎命令是传递给了 sh 而不是 cmd

我该怎么做才能确保为 Windows 构建的可执行文件不使用 sh 呢?


1
Cygwin是嗯,Cygwin。对于Windows端口,您可以尝试MinGw。 - πάντα ῥεῖ
4
Cygwin的全部意义在于表现得好像你正在一个*nix系统上。因此,是的,system()将调用sh。如果你想调用cmd,请在命令行中包含它。你可能还想使用cygpath在Cygwin和Windows路径之间进行转换。 - syam
@g-makulik 使用MinGW时一切都运行得很好,但实验室中的每台电脑都安装了cygwin(作为其他软件安装的一部分)。因此,我们希望使用它来代替添加另一个组件。 - WeaslB
1
如果我没记错,MinGW是一个约1MB的单个DLL。如果它在MinGW下运行得完美无缺,为什么还要费心呢? - syam
1
@WeaslB 不,你不能避免使用 sh,因为它是*nix系统下的shell解释器(Cygwin模拟的),就像cmd是Windows下的一样。但是你可以让sh调用类似于cmd "C:\...\program"这样的东西(你可能需要向cmd传递其他选项,请参阅其文档)。 - syam
显示剩余2条评论
1个回答

0

我认为你有两个选择。

首先,坚持使用system()使用的sh,并使用POSIX格式的路径到LibreOffice。

C:\..\LibreOffice 3.6\program\soffice

将变成

/cygdrive/c/../LibreOffice 3.6/program/soffice

你也可以使用cygpath工具来完成这个任务。

另一个选项是通过cmd调用LibreOffice:

cmd /c C:\..\LibreOffice 3.6\program\soffice args...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接