c++ - 如何编译#includes C++代码的C代码?

标签 c++ c compilation compiler-errors compiler-warnings

我必须编译生成的 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>

标志失效。

clang: error: unknown argument: '-q'
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated

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 库。将其用于您的优势。

  1. 创建包含您的 C 代码的 C 库,并将它们编译为 C 代码(例如,cc -c your_filename.c 将生成一个 your_filename.o 目标文件)。
  2. 创建一个 C++ 项目(如果您仔细设计,您应该能够在其中包含所有 C 头文件),并使用您的链接器链接到您生成的 your_filename.o 目标文件在第 1 步中,在编译该项目时。

关于c++ - 如何编译#includes C++代码的C代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123843/

相关文章:

c++ - 将子菜单项添加到菜单项

c++ - 使用管道通过 TTY、PTY 或 execv() 运行 shell(例如 sh)之间有什么区别?

c - 获取已安装程序的编译信息

c++ - 如何使用 -fPIC 重新编译

c - Visual Studio 2019 : Cannot change Runtime Library : Error "Element <RuntimeLibrary> has an invalid value of/MDd "

c++ - 在 C/C++ 中声明变量

c++ - visual studio 2010 和 gcc/g++ 4.6.3 之间 iostream 行为的意外差异

c++ - 程序从IDE运行时找不到图像目录,但从文件夹运行时可以吗?

python ctypes 国外库初始化和取消初始化

c - 是否有类似 "Hello, World"GNU 的库示例项目?