如何获取cl工具集的xlocinfo.h?

问题描述 投票:0回答:1

我需要在多个平台上编译这个C文件:

#include <xlocinfo.h>

int main() {
  return 0;
}

我可以在w64devkit中使用gcc成功编译这个文件:

C:/dev/scratch $ gcc -g ./main.c
C:/dev/scratch $

我想这是因为

xlocinfo.h
位于标准搜索路径之一:

C:/dev/scratch $ echo | gcc -xc -E -v -
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-w64-mingw32
Configured with: /gcc-13.2.0/configure --prefix=/w64devkit --with-sysroot=/w64devkit/x86_64-w64-mingw32 --with-native-system-header-dir=/include --target=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --enable-static --disable-shared --with-pic --with-gmp-include=/deps/include --with-gmp-lib=/deps/lib --with-mpc-include=/deps/include --with-mpc-lib=/deps/lib --with-mpfr-include=/deps/include --with-mpfr-lib=/deps/lib --enable-languages=c,c++ --enable-libgomp --enable-threads=posix --enable-version-specific-runtime-libs --disable-dependency-tracking --disable-multilib --disable-nls --disable-win32-registry --enable-mingw-wildcard CFLAGS_FOR_TARGET=-Os CXXFLAGS_FOR_TARGET=-Os LDFLAGS_FOR_TARGET=-s CFLAGS=-Os CXXFLAGS=-Os LDFLAGS=-s
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 13.2.0 (GCC)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
 C:/Program Files/w64devkit/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/cc1.exe -E -quiet -v -iprefix C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/ -isysroot C:/Program Files/w64devkit/bin/../x86_64-w64-mingw32 -D_REENTRANT - -mtune=generic -march=x86-64 -dumpbase -
ignoring duplicate directory "C:/Program Files/w64devkit/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.2.0/include"
ignoring nonexistent directory "C:/Program Files/w64devkit/bin/../x86_64-w64-mingw32/w64devkit/lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../include"
ignoring duplicate directory "C:/Program Files/w64devkit/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.2.0/include-fixed"
ignoring duplicate directory "C:/Program Files/w64devkit/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "C:/Program Files/w64devkit/bin/../x86_64-w64-mingw32/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/include
 C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/include-fixed
 C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include
End of search list.
# 0 "<stdin>"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "<stdin>"
COMPILER_PATH=C:/Program Files/w64devkit/bin/../libexec/gcc/x86_64-w64-mingw32/13.2.0/;C:/Program Files/w64devkit/bin/../libexec/gcc/
LIBRARY_PATH=C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/;C:/Program Files/w64devkit/bin/../lib/gcc/;C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../lib/;C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/;C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
C:/dev/scratch $
C:/dev/scratch $ realpath "C:/Program Files/w64devkit/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/include/xlocinfo.h"
C:/Program Files/w64devkit/x86_64-w64-mingw32/include/xlocinfo.h
C:/dev/scratch $
C:/dev/scratch $ ls -l "C:/Program Files/w64devkit/x86_64-w64-mingw32/include/xlocinfo.h"
-rw-rw-r--    1 root     root          3075 Dec 07 11:19 C:/Program Files/w64devkit/x86_64-w64-mingw32/include/xlocinfo.h

我需要在 Visual Studio 2022 的开发人员命令提示符中使用 clang-cl 工具链编译相同的 C 程序。编译失败,因为找不到

xlocinfo.h

c:\dev\scratch>clang-cl.exe main.c
main.c(1,10): fatal error: 'xlocinfo.h' file not found
#include <xlocinfo.h>
         ^~~~~~~~~~~~
1 error generated.

c:\dev\scratch>

我不知道如何查询

clang-cl.exe
的标准包含路径,但显然默认情况下不包含包含
xlocinfo.h
的路径。

我尝试将

/Isystem "C:/Program Files/w64devkit/x86_64-w64-mingw32/include/xlocinfo.h"
添加到编译器标志中,它生成了神秘的错误。我宁愿不追求这个,除非回答者认为这是可以的,因为这似乎是来自不同工具链的文件的不适当混合。

如何获得

xlocinfo.h
工具链的
clang-cl

我需要下载 Visual Studio (2022) 的一些可选包吗? 我没有做任何具体的事情来将它包含在我的 w64devkit 安装中——它似乎只是默认存在。

c locale include-path cl
1个回答
0
投票
当您添加“MSVC v142 - VS 2019 C++ x64/x86 构建工具”时,

xlocinfo.h
似乎被添加到 C:\Program Files\Microsoft Visual Studio�2\Enterprise\VC\Tools\MSVC .29.30133\include :

c:\dev\scratch>dir "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.29.30133\include\xlocinfo.h"
 Volume in drive C is Windows
 Volume Serial Number is 748B-8737

 Directory of C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.29.30133\include

02/07/2024  10:15 AM             5,634 xlocinfo.h
               1 File(s)          5,634 bytes
               0 Dir(s)  145,842,745,344 bytes free

c:\dev\scratch>

我认为该路径不会添加到

%PATH%
或 clang-cl.exe 用于分配默认包含搜索路径的任何其他机制,因为
clang-cl.exe main.cpp
仍然无法找到
xlocinfo.h
,但
clang-cl.exe /imsvc "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.29.30133/include/" main.cpp
可以工作:

c:\dev\scratch>clang-cl.exe main.cpp
main.cpp(1,10): fatal error: 'xlocinfo.h' file not found
#include <xlocinfo.h>
         ^~~~~~~~~~~~
1 error generated.

c:\dev\scratch>
c:\dev\scratch>clang-cl.exe /imsvc "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.29.30133/include/" main.cpp

c:\dev\scratch>

为了使编译工作,我必须将

main.c
更改为
main.cpp
,因为我猜
xlocinfo.h
是一个仅限 C++ 的标头。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.