0

ソースコードとハッシュアルゴリズムがハッシュ衝突をどのように処理するかを観察するために、オープンソースのハッシュ関数を調べています。私は現在、低ビットハッシュ関数に興味があり、この別の投稿を通じて FNV を知りました。

しかし、この特定のソース コードを実際にテストする方法を知っている人はいますか? C ファイルのいくつかをコンパイルしようとしましたが、gcc からエラーが発生し続けます。

hb2@hb1:~/Desktop/fnv$ gcc test_fnv.c
test_fnv.c: In function ‘unknown_hash_type’:
test_fnv.c:2183:5: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
test_fnv.c: In function ‘print_fnv32’:
test_fnv.c:2200:2: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘Fnv32_t’ [-Wformat]
test_fnv.c:2202:2: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘Fnv32_t’ [-Wformat]
test_fnv.c: In function ‘print_fnv64’:
test_fnv.c:2221:2: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘Fnv64_t’ [-Wformat]
test_fnv.c:2223:2: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘Fnv64_t’ [-Wformat]
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
hb2@hb1:~/Desktop/fnv$

プログラムを実行してテストするために具体的にコンパイルする必要があるファイルについてのアイデアはありますか?

事前にご協力いただきありがとうございます

FNV:情報ダウンロード

make check を実行すると、次のようになります。

hb2@hb1:~/Desktop/fnv$ make check
forming longlong.h
longlong.h formed
cc -O3 -g3 fnv32.c -c
fnv32.c: In function ‘test_fnv32’:
fnv32.c:156:11: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:169:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:169:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:183:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:183:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:197:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘Fnv32_t’ [-Wformat]
fnv32.c:197:8: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘Fnv32_t’ [-Wformat]
cc -O3 -g3 hash_32.c -c
cc -O3 -g3 hash_64.c -c
cc -O3 -g3 hash_32a.c -c
cc -O3 -g3 hash_64a.c -c
cc -O3 -g3 test_fnv.c -c
test_fnv.c: In function ‘unknown_hash_type’:
test_fnv.c:2183:5: warning: incompatible implicit declaration of built-in function ‘exit’ [enabled by default]
test_fnv.c: In function ‘print_fnv32’:
test_fnv.c:2200:2: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘Fnv32_t’ [-Wformat]
test_fnv.c:2202:2: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘Fnv32_t’ [-Wformat]
test_fnv.c: In function ‘print_fnv64’:
test_fnv.c:2221:2: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘Fnv64_t’ [-Wformat]
test_fnv.c:2223:2: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘Fnv64_t’ [-Wformat]
rm -f libfnv.a
ar rv libfnv.a hash_32.o hash_64.o hash_32a.o hash_64a.o test_fnv.o
ar: creating libfnv.a
a - hash_32.o
a - hash_64.o
a - hash_32a.o
a - hash_64a.o
a - test_fnv.o
: libfnv.a
cc fnv32.o libfnv.a -o fnv032
cc -O3 -g3 fnv64.c -c
fnv64.c: In function ‘test_fnv64’:
fnv64.c:160:10: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:175:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 4 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:175:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:190:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 4 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:190:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:205:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 4 has type ‘Fnv64_t’ [-Wformat]
fnv64.c:205:8: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘Fnv64_t’ [-Wformat]
cc fnv64.o libfnv.a -o fnv064
rm -f fnv132
cp -f fnv032 fnv132
rm -f fnv164
cp -f fnv064 fnv164
rm -f fnv1a32
cp -f fnv032 fnv1a32
rm -f fnv1a64
cp -f fnv064 fnv1a64
FNV-0 32 bit tests: passed
FNV-1 32 bit tests: passed
FNV-1a 32 bit tests: passed
FNV-0 64 bit tests: passed
FNV-1 64 bit tests: passed
FNV-1a 64 bit tests: passed
hb2@hb1:~/Desktop/fnv$ 

多分これは私が取得することになっているものです.FNVをもっと徹底的に読んで、実際にテストを実行する方法を確認しますが、最初はそれを見ませんでした

4

2 に答える 2