私はクロスプラットフォームのプロジェクトに取り組んでおり、OS X では Cocoa ウィンドウを作成するため、clang/llvm で 1 つのセクションをビルドする必要があり、プロジェクトの残りの部分は 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 のように出力されます。2 つのコンパイラはバイナリ互換ではないのでしょうか? 関数を無効にすると、問題なく動作します。