使用Matlab和mex的GNU GMP - 库问题

时间:2015-08-26 10:54:42

标签: c++ matlab cygwin mex gmp

我正在使用Matlab(R2015a)与Windows SDK 7.1一起使用Matlab的“mex”功能编译单个C ++源文件。这很好用。 但是,在这个C ++文件中,我想使用GNU GMP库(任意精度算术/ bigint),因为我会欣赏一些大整数计算。 因此,我下载了gmp-6.0.0并设置了Cygwin工具链来为我的Win-7(64位)机器编译我的GMP库。

我在Cygwin中以这种方式编译/配置GMP:

$ configure --host=none-pc-cygwin --enable-alloca=malloc-notreentrant  --enable-cxx --enable-static --disable-shared
$ make
$ make check
$ make install

...它给了我没有错误或问题的头文件和库文件(gmp.h,gmpxx.h)以及库(libgmp.a,libgmpxx.a)。

在我的C ++程序中,我包含标题:

#include "gmpxx.h"

...我将库/标题复制到同一个matlab工作目录。 在我的C ++代码中,我现在尝试使用GMP库,例如像这样:

mpz_t val1;
mpz_init(val1);

然后我调用matlab / mex / Windows SDK编译器(在Matlab中),如下所示:

mex TestProgram.cpp -v libgmp.a libgmpxx.a

...返回以下链接器错误:

Creating library TestProgram.lib and object TestProgram.exp
TestProgram.obj : error LNK2019: unresolved external symbol __gmpz_init referenced in function mexFunction
TestProgram.mexw64 : fatal error LNK1120: 1 unresolved externals

......我不知道为什么会这样做。显然,我编译的GMP库中缺少函数(?)......但为什么呢?或者它是mex和windows SDK编译器之间的问题?

有关如何调试的建议吗?我已经进行了广泛的搜索,但很少使用mex和GMP的组合==>搜索结果很少: - /

编辑:

  • 我是否必须提供/链接其他库/ DLL,因为Cygwin用于编译?
  • 这可能是名称错位吗? (我也尝试了一个纯粹的基于C的功能/编译,但结果完全相同)
  • 如果我使用Cygwin编译动态库(并将DLL提供给matlab),我会得到相同的链接器错误

最好也非常感谢! 马里奥

0 个答案:

没有答案