我正在尝试使用 G++ 编译一个简单的 C++ 程序。我运行的是 Windows 10,并且已经安装了 MinGW。因此,我尝试使用 G++ 编译此文件 C:\Users\Vesk\Desktop\Информатика\Hello World.cpp
,输入 g++ "C:\Users\Vesk\Desktop\Информатика\Hello World.cpp"-o "C:\Users\Vesk\Desktop\Информатика\Hello World.exe"在命令提示符中。 G++ 虽然没有编译该文件并给了我以下错误消息:
g++: error: C:\Users\Vesk\Desktop\???????????\Hello World.cpp: Invalid argument
g++: fatal error: no input files
compilation terminated.
“Информатика”只是一个用西里尔字母写的单词,所以我很困惑问题是什么。但后来我只是将“Информатика”文件夹重命名为“Informatics”。我尝试使用 g++ "C:\Users\Vesk\Desktop\Informatics\Hello World.cpp"-o "C:\Users\Vesk\Desktop\Informatics\Hello World.exe"再次编译该文件。.你瞧,它成功了。 G++ 编译了该文件,可执行文件位于文件夹中并且正在运行。但是,如果文件的路径包含西里尔字母(或其他 Unicode)字符,是否有任何方法可以实际编译该文件?如果是这样,怎么办?
最佳答案
Windows 使用 UTF-16 作为 Unicode 文件名。据我所知,它不支持 UTF-8 作为语言环境,尽管这非常有用。
我尝试了一个非常旧的 MinGW G++ 4.6.3,实际上它不支持当前语言环境之外的文件路径中的 Unicode 字符。不知道最近的 MinGW GCC。第一个可能的解决方案是使用俄语语言环境。
为了让 Windows 应用程序正确支持 Unicode 文件名,它需要将路径处理为 wchar_t
宽字符。例如,int main(int argc, const char* argv[])
经典签名必须替换为 int wmain(int argc, const wchar_t* argv[])
。对于像 GCC 这样的可移植软件来说,这是一个可能不值得的复杂化。极少数人会将字符放入当前语言环境之外的源文件路径中。
我在 Cygwin 上尝试了 G++ 10.2.0,它可以工作。这是因为所有 Cygwin 软件都与 cygwin1.dll 链接,它与其他服务一起自动将所有 UTF-8 路径转换为 UTF-16。
关于cmd - 如何将 Unicode 参数传递给 G++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67637164/