我正在使用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的组合==>搜索结果很少: - /
编辑:
最好也非常感谢! 马里奥