我正在构建最新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
答案 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;
}