我正在尝试使用Cygwin在Windows上安装以下Haskell软件包:HaskellCuda
您可以使用“cabal install cuda”安装软件包。
这是我得到的输出(你可能必须先“cuda install c2hs”):
$ cabal install
Configuring cuda-0.4.0.2...
checking for gcc... C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe
checking for C compiler default output file name...
configure: error: C compiler cannot create executables
See `config.log' for more details.
Resolving dependencies...
cabal.exe: Error: some packages failed to install:
cuda-0.4.0.2 failed during the configure step. The exception was:
ExitFailure 77
日志文件中的相关部分是:
configure:1758: checking for gcc
configure:1785: result: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe
configure:2022: checking for C compiler version
configure:2029: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe --version >&5
configure: line 2030: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe: command not found
configure:2035: $? = 127
configure:2042: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe -v >&5
configure: line 2043: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe: command not found
configure:2045: $? = 127
configure:2052: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe -V >&5
configure: line 2053: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe: command not found
configure:2055: $? = 127
configure:2078: checking for C compiler default output file name
configure:2105: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe -fno-stack-protector conftest.c >&5
configure: line 2106: C:\Haskell\2011.4.0.0\mingw\bin\gcc.exe: command not found
configure:2108: $? = 127
configure:2146: result:
configure: failed program was: [source elided]
如果我去Cygwin并输入
gcc --version
我得到了合理的东西。问题似乎更多的是我猜的路径,但我不确定是什么/如何解决它。我还应该注意使用“cabal install cuda-0.2.2”这个软件包的旧版本,我已经过了这一步(但稍后会出现不同的错误)。
要复制,请确保在没有空格的路径中安装Haskell平台,否则您可能会收到不同的错误。到目前为止,这是我唯一想到的。
任何有关这方面的帮助都会非常感激,到目前为止我已经花了大约一个星期而且没有到达任何地方。
编辑:
$PATH = C:\Haskell\2011.4.0.0\mingw\bin;
C:\Haskell\2011.4.0.0\lib\extralibs\bin;
C:\Haskell\2011.4.0.0\bin;
C:\CUDA\v4.0\bin\;
C:\cygwin\bin\;
...
答案 0 :(得分:0)
我设法让它安装,但它并不漂亮,我真的不明白为什么它不能用于“autoconf”框。
首先,我使用序列
而不是使用“cabal install”安装(使用本地副本)>runhaskell Setup.hs configure
>runhaskell Setup.hs build
>runhaskell Setup.hs install
这样做的主要原因是因为使用Setup.hs中的参数更改configure脚本中的$ CC变量很简单。我怀疑$ CC是变量给我的问题。我改变了:
[("CC", ccProg)
到
[("CC", "/cygdrive/c/cygwin/bin/gcc.exe")
在Setup.hs中的,它是Cygwin附带的gcc。我最初的怀疑是autoconf不喜欢Windows风格的gcc路径,它正在使用基于上面的日志文件。我也发现了我的计算机上的gcc的多个副本(一个在Haskell / mingw中,一个在单独安装的mingw中,以及$ PATH指向的任何版本,只有cygwin gcc能够成功编译测试文件检查。使用cygwin gcc,我可以运行
gcc hello.c
包含任何文件(没有外部包含指令),而对于任何其他gcc副本,甚至类似
gcc -I/cygdrive/c/..../include hello.c
无法找到。不知道为什么。
只需将$ CC更改为Cygwin gcc即可修复几乎所有错误。 “检查包含cudaRuntimeGetVersion / cuGetDriverVersion的库”时发生了下一个错误。
文件configure尝试编译
#define PACKAGE_NAME "Haskell CUDA bindings"
#define PACKAGE_TARNAME "cuda"
#define PACKAGE_VERSION "0.4.0.0"
#define PACKAGE_STRING "Haskell CUDA bindings 0.4.0.0"
#define PACKAGE_BUGREPORT "tmcdonell@cse.unsw.edu.au"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define HAVE_CUDA_H 1
#define HAVE_CUDA_RUNTIME_API_H 1
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char cudaRuntimeGetVersion ();
int main ()
{
return cudaRuntimeGetVersion ();
;
return 0;
}
使用命令:
/cygdrive/c/cygwin/bin/gcc.exe -o conftest.exe -fno-stack-protector
-I/cygdrive/c/CUDA/v4.0/include -L/cygdrive/c/CUDA/v4.0/lib conftest.c -lcudart
错误(来自日志文件)是
/cygdrive/c/Users/crockeea/AppData/Local/Temp/ccKMQJiq.o:conftest.c:(.text+0xc):
undefined reference to `_cudaRuntimeGetVersion'
我的C上有点生疏,但似乎这里没有包含相应的头文件。这可能是不对的,因为在运行configure时,同一个文件在基于Unix的系统上运行,但这是我最好的猜测。此外,编辑configure以使此文件包含cuda.h只会导致有关cudaRuntimeGetVersion的多个定义的不同错误。所以我的黑客是在配置文件中注释掉cudaRuntimeGetVersion / cuGetDriverVersion的引用。我将C-comments放入配置文件将要编译的C文件中(很容易根据日志文件中的行号在配置文件中找到这些文件的源代码)。我不知道以这种方式修改配置文件的后果。
这使我能够超越“构建”阶段。如果我遇到任何其他问题,请发表更多评论。