我在使用Xcode 6.2编译OS X 10.10上的代码时遇到了一些问题。
Apple LLVM 6.0版(clang-600.0.57)(基于LLVM 3.5svn)
目标: x86_64的-苹果darwin14.1.0
我的程序非常简单。头文件header.h
:
int send();
我在main.c
中包含此标题:
#include <stdio.h>
#include "header.h"
int main(int argc, const char * argv[]) {
return 0;
}
当我尝试编译它时,我得到以下错误:
... / header.h:12:5:'send'的冲突类型... / main.c:2:10:In 文件包含在... / main.c:2: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/socket.h:574:9: 以前的声明在这里
ssize_t send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send);
为什么我在不包含socket.h
的情况下收到此错误?我知道解决方案可以重命名send
功能,但我把卡放在桌子上,这是我的作业,我必须在Linux上用上述声明写它。但我想在Mac上编译它。此外,我可以创建一些宏来检查操作系统,并仅在OS X上重命名我的功能。问题是我稍后会得到一些静态库,这个解决方案将无法工作。有什么建议?也许我有一些错误的编译选项或Xcode设置?请帮忙
答案 0 :(得分:3)
命令行上的Clang工作原理:
clang main.c
问题是xcode的ModuleCache 。这似乎透明地包含了很多东西:D它将以下标志传递给clang:
-fmodules -fmodules-cache-path=/Users/dpich/Library/Developer/Xcode/DerivedData/ModuleCache -fmodules-prune-interval=86400 -fmodules-prune-after=345600
如果在构建设置中禁用它,则编译正常:
答案 1 :(得分:1)
即使您未包含<sys/socket.h>
:
<sys/socket.h>
。您最好的选择是为send
功能使用不同的名称。
答案 2 :(得分:0)