【发布时间】:2014-08-27 11:47:19
【问题描述】:
我已经做了所有事情,并且得到了回报。 尝试使用 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-and-it's-dependencies 无法识别的外部符号错误
~ 我重写了源代码中的每一个变量声明,使其与 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 的文件系统管理和链接宠坏了。
【问题讨论】: