尝试使用GNU Scientific Library,但会发生奇怪的链接器错误

时间:2012-05-06 16:30:48

标签: c gsl

所以我用Cygwin从源代码编译了GSL。一切都很顺利,我没有得到任何错误。但是当我尝试编译一些简单的代码时,我得到以下错误:

..\..\..\Programme\CodeBlocks\MinGW\lib\libgsl.a(error.o) In function `gsl_error':
\usr\include\gsl\err\error.c|43|undefined reference to `__getreent'
\usr\include\gsl\err\error.c|44|undefined reference to `__getreent'
\usr\include\gsl\err\error.c|45|undefined reference to `__getreent'
..\..\..\Programme\CodeBlocks\MinGW\lib\libgsl.a(stream.o) In function `gsl_stream_printf':
\usr\include\gsl\err\stream.c|37|undefined reference to `__getreent'
..\..\..\Programme\CodeBlocks\MinGW\lib\libgsl.a(stream.o) In function `gsl_set_stream':
\usr\include\gsl\err\stream.c|61|undefined reference to `__getreent'

我链接了libgsl.a和libgscblas.a库,没有任何其他函数的抱怨。

供将来参考:当你想在code :: blocks

中设置工具链时,不要按取消而不是确定

2 个答案:

答案 0 :(得分:1)

您看到的错误是由于MinGW默认情况下没有链接Cygwin DLL。

MinGW-和Cygwin编译的库彼此不能很好地发挥作用 - 虽然它是possible to get it to work,但这并不是一个好主意。

为您的项目选择一个工具链,在这种情况下,意味着设置Code :: Blocks,以便它使用Cygwin工具链代替捆绑的MinGW分发或者使用MinGW编译GSL

答案 1 :(得分:0)

您可以在Cygwin中使用以下选项:

./configure CC=i686-w64-mingw32-gcc

然后你可以在CodeBlocks中使用GSL。