我已经完成了所有事情,而且还得到了回报。 尝试使用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的文件系统管理和链接所破坏了。
答案 0 :(得分:0)
在MinGW下编译GSL库很容易,实际上从源代码编译的过程与Linux中的完全相同。以下是我采取的步骤:
为Windows安装MinGW。我正在使用MinGW-w64,但也有一个流行的TDM-GCC发行版附带友好的网络安装程序。
获取GSL sources,并提取tarball(gsl-1.16.tar.gz
是最新版本)
像往常一样编译,我使用了以下命令:
$ ./configure --host=x86_64-w64-mingw32 --prefix=/mingw/local --enable-shared --enable-static
$ make
$ make install
完成时间需要几分钟。也许你可以启用并行构建来加速编译(make -j
)
您最终会在/mingw/local
中安装必要的文件,其下方的常规结构(bin
,lib
,include
)。
最后,您可以使用以下命令编译示例程序:
$ export PATH=/mingw/local:$PATH
$ gcc `gsl-config --cflags` -o main main.c `gsl-config --libs`
当然,如果您更喜欢使用Visual C ++作为编译器,那么人们已经准备好使用Visual Studio构建GSL的解决方案(手动创建的项目文件,或使用像CMake之类的构建系统)。有关此类项目,请参阅this question。
第三种选择是使用Cygwin。