我正在开发一个跨平台的项目,在 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 生成生成文件。我尝试了几组不同的编译器标志-fPIC
等。但我得到的值打印为 1835455280、1746993968、1648001840。这两个编译器不应该是二进制兼容的吗?如果我使函数无效,那么它就可以正常工作。