1

lynx をコンパイルしようとしているときに、'with-dmalloc' 構成オプションを使用しました。しかし、コンパイルが中止され、次のエラーが発生しました:

/usr/include/dmalloc.h:460: エラー: 予想される識別子または '(' '__extension__' の前
> /usr/include/dmalloc.h:484: エラー: '__extension__' の前に識別子または '(' が必要です
> make[1]: *** [HTParse.o] エラー 1
> make[1]: ディレクトリ `/tmp/lynx2-8-8/WWW/Library/Implementation' を離れます
> make: *** [すべて] エラー 2

これは、dmalloc.h の誤った行が保持するものです。


> Line 460: char *strdup(const char *string);
> Linu 484: char *strndup(const char *string, const DMALLOC_SIZE len);

このファイルは、 http://www.filewatcher.com/p/dmalloc-5.5.2.tbz.467309/include/dmalloc.h.htmlでも表示できます。

dmalloc の開発はほとんど停止しているため、アップストリームからの修正はあまり期待できません。何か助けはありますか?

4

2 に答える 2

3

Fedora 21 x86_64 に dmalloc をインストールしているときに、同様の問題に直面しました。

dmalloc-5.5.2]$ make
rm -f dmalloc.h dmalloc.h.t
cat ./dmalloc.h.1 dmalloc.h.2 ./dmalloc.h.3 > dmalloc.h.t
mv dmalloc.h.t dmalloc.h
rm -f arg_check.o
gcc -g -O2  -DHAVE_STDARG_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -    DHAVE_UNISTD_H=1 -DHAVE_SYS_MMAN_H=1 -DHAVE_SYS_TYPES_H=1 -    DHAVE_W32API_WINBASE_H=0 -DHAVE_W32API_WINDEF_H=0 -DHAVE_SYS_CYGWIN_H=0 -    DHAVE_SIGNAL_H=1  -I. -I.  -c arg_check.c -o ./arg_check.o
In file included from /usr/include/string.h:634:0,
             from arg_check.c:33:
dmalloc.h:484:7: error: expected identifier or ‘(’ before ‘__extension__’
 char *strndup(const char *string, const DMALLOC_SIZE len);
   ^
Makefile:362: recipe for target 'arg_check.o' failed
make: *** [arg_check.o] Error 1

dmalloc-5.5.2/dmalloc.h.3 を変更して解決しました:

 - 432 | extern
 - 433 | char    *strndup(const char *string, const DMALLOC_SIZE len);

 + 432 | #undef strndup
 + 433 | extern
 + 434 | char    *strndup(const char *string, const DMALLOC_SIZE len);

知恵の源: https://dev.openwrt.org/browser/packages/devel/dmalloc/patches/400-undef-strndup.patch?rev=31253

于 2016-01-12T23:59:57.813 に答える
0

私はこのようなものに遭遇し、これは dmalloc.h が <unistd.h> などの前に含まれていたことが原因であることがわかりました。また、dmalloc.h からのマクロ識別子が実際の valloc/realloc/memdup などの宣言を台無しにしていました。

これはあなたが見ているものでしょうか?

于 2010-09-05T15:06:15.157 に答える