在Mac OS X 10.6.8上的gcc-4.2.1中不存在strnlen - 如何定义它?

时间:2015-09-08 22:53:37

标签: c++ c macos gcc

我正在构建最新dcraw.c的跨平台OS X版本我在OS X 10.6.8上执行此操作以获得PPC兼容性。现在我的问题是strnlen似乎在最新版本的程序中使用,它在10.6.8上不存在,gcc给我这样的消息:

Undefined symbols for architecture i386:
  "_strnlen", referenced from:
...
Undefined symbols for architecture ppc:
  "_strnlen", referenced from:
...

所以,我想定义strnlen但不太清楚如何。

问:任何人都可以在dcraw.c中提供strnlen的工作定义吗?

我的gcc编译命令是这个btw:

gcc -o dcraw -O4 -Wall -force_cpusubtype_ALL -mmacosx-version-min=10.4 -arch i386 -arch ppc dcraw.c -lm -DNODEPS

1 个答案:

答案 0 :(得分:8)

strnlen是GNU扩展,也在POSIX(IEEE Std 1003.1-2008)中指定。如果strnlen不可用(从10.7开始),请使用以下替换。

// Use this if strnlen is missing.
size_t strnlen(const char *str, size_t max)
{
    const char *end = memchr (str, 0, max);
    return end ? (size_t)(end - str) : max;
}