我正在开发一个跨平台的项目,并且在OS X上,必须使用clang/llvm构建一个部分,因为它创建了一个Cocoa窗口,其余部分使用GCC构建。这被编译成一个链接到主要可执行文件的静态库。例如GCC和LLVM之间的兼容性
//printnum.h
std::pair<uint32_t, uint32_t> printnum(int num);
//printnum.mm
#include "printnum.h"
#include <stdio.h>
std::pair<uint32_t, uint32_t> printnum(int num)
{
printf("%d\n", num);
//..... Objective C Code.....
}
//main.cpp
#include "printnum.h"
int main()
{
printnum(0);
return 0;
}
我正在使用CMake生成一个makefile。我已经尝试了几种不同的编译器标记集合-fPIC
等。但是我得到的值打印为1835455280,1746993968,1648001840.两个编译器不应该是二进制兼容的吗?如果我使这个函数无效,那么它工作得很好。
我不知道LLVM,但对于C++甚至不同的主要版本的GCC并不总是二进制兼容的。我认为你必须回头一段时间才能有问题。 – ams 2012-03-23 17:30:24
声音喜欢一个错误。请在LLVM的bugzilla中提交问题报告。 – 2012-03-24 17:54:18