我正在開發一個跨平臺的項目,並且在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