我需要在多个平台上编译这个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
?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++ 的标头。