如何在Windows上编译C完美最小哈希库?

时间:2012-02-21 22:21:42

标签: c windows makefile configure

我安装了mingw和Msys。

我已经运行bash configure来创建make文件。

但是当我运行make时,我得到以下输出

E:\cmph-1.1>make
make  all-recursive
make[1]: Entering directory `/e/cmph-1.1'
Making all in src
make[2]: Entering directory `/e/cmph-1.1/src'
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT hash.lo -MD -MP -MF .deps/hash.Tpo -c -o hash.lo hash.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT hash.lo -MD -MP -MF .deps/hash.Tpo -c hash.c  -DDLL_EXPORT -DPIC -o .libs/hash.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT hash.lo -MD -MP -MF .deps/hash.Tpo -c hash.c -o hash.o >/dev/null 2>&1
mv -f .deps/hash.Tpo .deps/hash.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT jenkins_hash.lo -MD -MP -MF .deps/jenkins_hash.Tpo -c -o jenkins_hash.lo jenkins_hash.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT jenkins_hash.lo -MD -MP -MF .deps/jenkins_hash.Tpo -c jenkins_hash.c  -DDLL_EXPORT -DPIC -o .libs/jenkins_hash.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT jenkins_hash.lo -MD -MP -MF .deps/jenkins_hash.Tpo -c jenkins_hash.c -o jenkins_hash.o >/dev/null 2>&1
mv -f .deps/jenkins_hash.Tpo .deps/jenkins_hash.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT vstack.lo -MD -MP -MF .deps/vstack.Tpo -c -o vstack.lo vstack.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT vstack.lo -MD -MP -MF .deps/vstack.Tpo -c vstack.c  -DDLL_EXPORT -DPIC -o .libs/vstack.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT vstack.lo -MD -MP -MF .deps/vstack.Tpo -c vstack.c -o vstack.o >/dev/null 2>&1
mv -f .deps/vstack.Tpo .deps/vstack.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT vqueue.lo -MD -MP -MF .deps/vqueue.Tpo -c -o vqueue.lo vqueue.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT vqueue.lo -MD -MP -MF .deps/vqueue.Tpo -c vqueue.c  -DDLL_EXPORT -DPIC -o .libs/vqueue.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT vqueue.lo -MD -MP -MF .deps/vqueue.Tpo -c vqueue.c -o vqueue.o >/dev/null 2>&1
mv -f .deps/vqueue.Tpo .deps/vqueue.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT graph.lo -MD -MP -MF .deps/graph.Tpo -c -o graph.lo graph.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT graph.lo -MD -MP -MF .deps/graph.Tpo -c graph.c  -DDLL_EXPORT -DPIC -o .libs/graph.o
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT graph.lo -MD -MP -MF .deps/graph.Tpo -c graph.c -o graph.o >/dev/null 2>&1
mv -f .deps/graph.Tpo .deps/graph.Plo
/bin/sh ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..     -Wall -Werror -MT cmph.lo -MD -MP -MF .deps/cmph.Tpo -c -o cmph.lo cmph.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wall -Werror -MT cmph.lo -MD -MP -MF .deps/cmph.Tpo -c cmph.c  -DDLL_EXPORT -DPIC -o .libs/cmph.o
In file included from cmph.h:105:0,
                 from cmph.c:1:
cmph_time.h: In function 'elapsed_time_in_seconds':
cmph_time.h:23:19: error: storage size of 'e_time' isn't known
cmph_time.h:24:4: error: implicit declaration of function 'gettimeofday' [-Werror=implicit-function-declaration]
cmph_time.h:23:19: error: unused variable 'e_time' [-Werror=unused-variable]
cmph_time.h: In function 'elapsed_time_in_useconds':
cmph_time.h:34:19: error: storage size of 'e_time' isn't known
cmph_time.h:34:19: error: unused variable 'e_time' [-Werror=unused-variable]
cmph.c: In function 'count_nlfile_keys':
cmph.c:154:18: error: variable 'ptr' set but not used [-Werror=unused-but-set-variable]
cc1.exe: all warnings being treated as errors

我正在努力弄清楚我需要做些什么才能让它编译。<​​/ p>

2 个答案:

答案 0 :(得分:2)

如果你查看那个头文件,你会看到这个结构的顶部附近:

#ifdef WIN32
// include headers to use gettimeofday
#else
    #ifdef __GNUC__
    #include <sys/time.h>
    #include <sys/resource.h>
    #endif
#endif

看起来你不会在下半场结束,你将获得gettimeofday()struct timeval的声明。

我对MinGW不太熟悉 - 是否定义了WIN32?如果是这样,您可能需要重新设计预处理器逻辑以执行您想要的操作。作为参考,它在cygwin中工作正常。

答案 1 :(得分:0)

查看此修补程序,其中包含要在mingw上编译的修补程序:http://sourceforge.net/p/cmph/patches/3/