私はクロスプラットフォームのプロジェクトに取り組んでいます。OS Xでは、CCCAウィンドウを作成するので、clang/llvmで1つのセクションを構築しなければならず、プロジェクトの残りは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を使用してメイクファイルを生成しています。コンパイラフラグ-fPIC
などのいくつかの異なるセットを試しましたが、1835455280、1746993968、1648001840のように値が表示されます.2つのコンパイラはバイナリ互換でなければなりませんか?関数をvoidにするとうまくいきます。
私はLLVMについてはわかりませんが、C++では、GCCの異なるメジャーバージョンであっても、必ずしもバイナリ互換であるとは限りません。私はあなたが問題を抱えるためにしばらく前に戻らなければならないと思います。 – ams
Soundsはバグが好きです。 LLVMのbugzillaで問題報告を提出してください。 –