Windows中的另一个GSL链接错误

时间:2014-07-07 04:30:08

标签: windows matlab linker gsl

我已经完成了所有事情,而且还得到了回报。 尝试使用Windows 7.1 SDK从MATLAB编译mex文件。

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

〜我已经创建了一个MEX文件,可以在Linux和OS X上通过GCC链接和编译。不会崩溃MATLAB,网关功能正常工作

〜经过多次混淆,我将我的开发平台从64位切换到x86 Win7

〜我发现了.dll构建的文件,但它们没有链接。使用MATLAB的链接器标志在MATLAB中链接库将默认为.lib,所以......

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

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

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

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

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

〜我已经在线阅读了多篇关于如何将所有内容链接在一起的教程,其中大多数没有任何断开的链接或不可复制的结果。我没有找到太多的Cygwin或MinGW。

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

如果我正在进行基本的矩阵和向量运算,我会被设置,但不幸的是我正在使用的各种分解例程需要来自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

所以,出于选择和沮丧的想法,我(自然地)来到堆栈溢出。任何人都知道如何解决这个问题?我在谷歌上发现的唯一一件事就是指出wineHQ错误,不是很有帮助。

而且,如果可能的话,我宁愿不尝试先在VS201X上编译。如果有必要,我可以访问我需要的任何版本,但对我而言,这似乎是一个多余的步骤。也许我已经被基于Unix的文件系统管理和链接所破坏了。

1 个答案:

答案 0 :(得分:0)

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

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

  2. 获取GSL sources,并提取tarball(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`
    

  5. 当然,如果您更喜欢使用Visual C ++作为编译器,那么人们已经准备好使用Visual Studio构建GSL的解决方案(手动创建的项目文件,或使用像CMake之类的构建系统)。有关此类项目,请参阅this question

    第三种选择是使用Cygwin