我正在使用一个外部库,其头部以:
开头/* Headers other than ISO C++, such as BSD and Posix.1 headers */
// define INCLUDE_LIBC to include <libc.h> if available
#ifdef INCLUDE_LIBC
#ifdef HAVE_LIBC_H
#ifndef INCLUDE_LIBC_H_AS_CXX
BEGIN_EXTERN_C
#endif
#include <libc.h>
#ifndef INCLUDE_LIBC_H_AS_CXX
END_EXTERN_C
#endif
#endif
#endif
当我在iPad项目(设备,调试)中使用它时,会引发编译错误:
libc.h: No such file or directory
iPhone SDK附带的任何框架中都存在libc
?关于如何解决此错误的任何其他建议?
答案 0 :(得分:0)
据我所知,我的SDK中不存在libc.h。
答案 1 :(得分:0)
AFAIK,没有libc.h这样的东西。我从未见过这样的事情。如果存在libc.h,你可能会在某个地方找到一个libc.c,但你也找不到那个人。
相反,你必须#include stdio.h,stdlib.h,string.h,....这些头文件包含已编译和存档到libc.lib(或任何系统的库扩展名)的函数的定义和声明。
如果 是 一个libc.h会非常方便:当我忘记#include某些标题或其他时,它会有所帮助。你当然可以制作你自己的头文件,什么都不做 但是 #include stdio.h,stdint.h等等;你可以随意命名,甚至可以命名为libc.h。
但是/usr/include/libc.h(比如说)不存在,它永远不会存在。
- 皮特
答案 2 :(得分:0)
你可以在这里找到它:http://www.opensource.apple.com/release/mac-os-x-1083/点击libc-825.26。
但是,您可能会考虑注释掉该代码,因为从注释中可以看出该库不是必需的。
交叉编译时,这是一种常见的问题。
答案 3 :(得分:0)
我不知道其他答案说libc.h
不存在;它至少存在 - 至少在我的系统(运行OS X 10.9.2的x86_64)上 - 在/usr/include/
中。 FWIW,以下是内容:
/*
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*
* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
*/
#ifndef _LIBC_H
#define _LIBC_H
#include <stdio.h>
#include <unistd.h>
#ifdef __STRICT_BSD__
#include <strings.h>
#include <varargs.h>
#else
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <stdarg.h>
#endif
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/resource.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <mach/machine/vm_types.h>
#include <mach/boolean.h>
#include <mach/kern_return.h>
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char *q_data;
};
#include <sys/cdefs.h>
__BEGIN_DECLS
extern kern_return_t map_fd(int fd, vm_offset_t offset,
vm_offset_t *addr, boolean_t find_space, vm_size_t numbytes);
__END_DECLS
#endif /* _LIBC_H */
至于其中一个答案是什么,“如果存在libc.h,你希望在某个地方找到一个libc.c”,这通常不正确(尽管海报并不像我读到的那样打算这样做它);一旦.c文件被编译成目标文件,你肯定可以放弃.c文件;否则闭源软件(我们今天所知)就不存在了!