【发布时间】:2012-03-23 01:28:46
【问题描述】:
我正在开发一个跨平台的项目,在 OS X 上,必须使用 clang/llvm 构建一个部分,因为它会创建一个 Cocoa 窗口,该项目的其余部分是使用 GCC 构建的。这被编译成一个静态库,该库链接到主可执行文件。例如
//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 也不总是二进制兼容的。我认为您必须退后一段时间才能遇到问题。
-
听起来像是一个错误。请在 LLVM 的 bugzilla 中提交问题报告。