“-x c”后返回本机文件处理

jww*_*jww 1 c c++ clang

这是添加 \xe2\x80\x9cextern C\xe2\x80\x9d 作为符号的编译器选项的后续操作?和模拟接口的建议。

\n\n

使用 clang,-x c允许我将后续文件视为 C 文件。但是,它将所有后续文件视为 C 文件,包括目标文件。例如,以下内容:

\n\n
/usr/local/bin/clang++ /usr/local/ssl/fips-2.0/lib/fipscanister.o -x c /usr/local/ssl/fips-2.0/lib/fips_premain.c\n-Wall -Wextra main.o /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -o main.exe -Wl,--no-demangle -ldl\n\nmain.o:1:1: error: expected unqualified-id\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003>\n^\nmain.o:1:9: warning: null character ignored [-Wnull-character]\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003>\n                                           ^\nmain.o:1:10: warning: null character ignored [-Wnull-character]\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003><U+0000>\n\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003>\n^\nmain.o:1:9: warning: null character ignored [-Wnull-character]\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003>\n                                           ^\nmain.o:1:10: warning: null character ignored [-Wnull-character]\n<U+007F>ELF<U+0002><U+0001><U+0001><U+0003><U+0000>\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

从前面的问题来看,我需要-x c fips_premain.c因为 iffips_premain.c是用 C++ 编译器编译的,然后我会得到未解析的符号。(并且fips_premain.c由 FIPS 流程隔离,因此无法更改)。

\n\n

-x native我尝试使用(类似于)切换回本机-march,但这产生了错误。

\n\n

如何切换回后续文件的“本机”处理以进行链接?

\n

Mat*_*son 5

您将需要重新排列您的编译命令,例如main.o之前的命令-x c(因为-x c告诉编译器“无论我使用什么扩展名,以下文件都是 C 源文件” - 所以 Clang 尝试编译main.o为源文件,并且失败了告诉...)

您可以通过使用clang -c fips_premain.c, 以及fips_premain.o在链接事物的行中使用来完成此操作。

换句话说,-x c紧随其后的是

  -x language
       Treat subsequent input files as having type language.
Run Code Online (Sandbox Code Playgroud)

我还没有测试过它,但在 .c 文件之后执行 -x none 也可能有效 - gcc 手册说,如果 Clang 与 gcc 的兼容性正常工作,那么这应该有效。编辑:可以确认是否-x none符合预期。