我必须编译生成的 C 代码 #include
s C++ 头文件,它可以在 Linux、OS X 和 Windows 上运行。我把 #include
我自己能够从中与 C++ 代码进行交互。
然而,C 代码使得严格的编译器会捕获可能被视为警告的错误。我想将这些作为警告传递出去,因为其中大部分是我无法控制的生成代码。
这是我尝试编译它的尝试(我使用 CMake
,顺便说一句):
(我使用这些标志:-Wno-write-strings -Wno-error -fpermissive
)
- 将整个项目视为 C++ 代码:在 Linux 上工作(使用
g++
)但在 OS X 上我得到:
与 Clang
:
error: assigning to 'char *' from incompatible type 'const char *'
与 g++
:
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:18:no such instruction: `vmovdqa LC0(%rip), %xmm3'
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:19:no such instruction: `vmovdqa LC1(%rip), %xmm2'
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:20:no such instruction: `vmovdqu (%rsi), %xmm7'
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:21:no such instruction: `vmovdqu 16(%rsi), %xmm8'
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:22:no such instruction: `vmovdqa LC2(%rip), %xmm1'
/var/folders/hf/5dbkbqrx5p3bmnpdqqy4wgpr0000gn/T//ccvMHo2S.s:23:no such instruction: `vpshufb %xmm3, %xmm7,%xmm6'
- 将 C 代码视为 C 代码:
找不到 <atomic>
fatal error: atomic: No such file or directory
#include <atomic>
- 使用
-Wa -q
根据这个答案标记: https://stackoverflow.com/a/19339870/3684931 (我弄错了,应该是-Wa, -q
)
标志失效。
clang: error: unknown argument: '-q'
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
- 使用
-Wa,-q
根据这个答案标记: https://stackoverflow.com/a/19339870/3684931
Flag 仍然无效。
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
clang: error: unsupported argument '-q' to option 'Wa,'
我该如何构建它?
最佳答案
在我看来,你似乎在倒着解决这个问题。每个符合标准的 C++ 实现似乎都有一个兼容的 C ABI,因此 C++ 项目可以使用 C 库。将其用于您的优势。
- 创建包含您的 C 代码的 C 库,并将它们编译为 C 代码(例如,
cc -c your_filename.c
将生成一个your_filename.o
目标文件)。 - 创建一个 C++ 项目(如果您仔细设计,您应该能够在其中包含所有 C 头文件),并使用您的链接器链接到您生成的
your_filename.o
目标文件在第 1 步中,在编译该项目时。
关于c++ - 如何编译#includes C++代码的C代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123843/