Windows中的另一个GSL链接错误

我已经完成了所有的工作,并且已经付清了。 尝试使用Windows 7.1 SDK从MATLAB编译mex文件。

〜我创build了一个编译我的C源代码在GCC上

〜我创build了一个MEX文件,通过GCC在Linux和OS X上链接和编译。不会崩溃MATLAB,网关function正常工作

〜经过很多困惑之后,我将我的开发平台格式64位转换为x86 Win7

〜我发现.dllbuild立的文件,但他们不链接。 使用MATLAB的链接器标志在MATLAB中链接库将默认为.lib,所以…

〜我发现 – 经过大量的search – 简单的,预编译的x86 GSL .lib和源文件,并将它们与MATLAB链接,消除了任何gsl_blas.h和它的依赖无法识别的外部符号错误

〜我已经重写了我的源代码中的每一个variables声明,以便它与C89标准兼容

〜我已经适当地设置链接器标志,以避免LIBCMT和任何其他LIB冲突

〜我已经安装了2010年和2012年的VC C运行库

〜我已经检查,以确保我的系统文件中有msvcrt.dll和msvcp60.dll

〜我在网上关注了多个教程,关于如何将所有内容链接在一起,其中大部分都没有链接或无法复制的结果。 对于Cygwin或MinGW,我没有find太多东西。

〜我试过使用Lcc-win32 2.4.1编译器

如果我正在做基本的matrix和向量操作,我会被设置,但不幸的是,我正在使用的各种分解例程需要来自cblas库的部分,我也链接了这些部分,但是我得到了大约30个错误,都报告了相同的事情…

cblas.lib(ctrsv.obj) : error LNK2001: unresolved external symbol __libm_sse2_sqrt_precise 

这是我的MATLAB命令。

 mex -largeArrayDims -IC:\gsl\include -LC:\gsl\lib -lgsl -lcblas LINKFLAGS="$LINKFLAGS /NODEFAULTLIB:libcmt.lib" file1.c file2.c 

所以,出于select和失去了我的头脑,我(自然)来堆栈溢出。 任何人有任何想法如何解决这一个? 我在google上search的唯一一个点wineHQ错误,不是很有帮助。

而且,如果可能的话,我宁愿不尝试先编译VS201X。 如果有必要,我可以访问任何我需要的版本,但对我来说,这似乎是一个冗余的步骤。 不过,也许我被宠坏了基于Unix的文件系统pipe理和链接。

Solutions Collecting From Web of "Windows中的另一个GSL链接错误"

在MinGW下编译GSL库很容易,事实上从源代码编译的过程与Linux中的完全相同。 以下是我采取的步骤:

  1. 安装MinGW for Windows。 我正在使用MinGW-w64,但也有流行的TDM-GCC发行版,它带有一个友好的网络安装程序。

  2. 获取GSL源文件 ,并提取压缩包( gsl-1.16.tar.gz是目前最新的)

  3. 像往常一样编译,我用了下面的命令:

     $ ./configure --host=x86_64-w64-mingw32 --prefix=/mingw/local --enable-shared --enable-static $ make $ make install 

    这应该需要几分钟才能完成。 也许你可以启用并行构建来加速编译( make -j

    你将最终得到安装在/mingw/local的必要文件( binlibinclude )。

  4. 最后你可以编写一个示例程序:

     $ export PATH=/mingw/local:$PATH $ gcc `gsl-config --cflags` -o main main.c `gsl-config --libs` 

当然,如果你更喜欢使用Visual C ++作为编译器,那么人们已经准备好使用Visual Studio构建GSL的解决方案(手动创建项目文件或者使用像CMake之类的构建系统)。 看到这个问题的这样的项目。

第三个选项是使用Cygwin 。