我必须编译生成的C代码#include
的C ++头文件,它可以在Linux,OS X和Windows上运行。我自己设置#include
以便能够与C ++代码进行交互。
然而,C代码是这样的,严格的编译器会捕获可以被视为警告的错误。我希望将这些作为警告传递出来,因为大部分内容都是生成的代码,我无法控制。
以下是我尝试编译它(我使用CMake
,btw):
(我使用这些标志:-Wno-write-strings -Wno-error -fpermissive
)
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'
找不到<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 标志仍无效。
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
clang: error: unsupported argument '-q' to option 'Wa,'
我该如何构建这个?
答案 0 :(得分:1)
你似乎向我解决了这个问题。每个符合C ++的实现似乎都具有兼容的C ABI,因此C ++项目可以使用C库。使用它对您有利。
cc -c your_filename.c
将生成your_filename.o
目标文件。)your_filename.o
目标文件,编译该项目。答案 1 :(得分:0)
我自己把#includes用来与C ++代码进行交互。
这是你出错的地方。 <{1}}来自#include
文件的C ++标头永远不会有效。
相反,您需要创建与C和C ++兼容的头文件。这些文件应该只包含C和C ++公共子集中的代码;它们还应包含:
.c
使包含此标头的C ++单元使用C ABI创建调用。
在此标头中,您可以声明一些将与C文件所需的C ++代码进行交互的函数。您可以在您编写的新C ++源文件中实现这些功能。