它本质上是一个C ++和编译器问题。但我将描述这种错误是如何发生的。
我正在使用C ++和Eigen library编写mathematica librarylink函数,如下所示
libsource = "#include \"WolframLibrary.h\"
#include <Eigen/Dense>
EXTERN_C DLLEXPORT int donothing(WolframLibraryData libData,mint \
Argc,MArgument*Args,MArgument Res) {
using namespace std;
using namespace Eigen;
Matrix2d a;
a<<1,2,3,4;
return LIBRARY_NO_ERROR;}";
并使用
加载它LibraryFunctionUnload[donothing];
libnew = CreateLibrary[libsource, "donothing", "Debug" -> True,
"CompileOptions" -> "-x c++"];
donothing = LibraryFunctionLoad[libnew, "donothing", {}, "Void"];
我启用了debug,mathematica输出shell编译结果如下:
C:\Users\qq\AppData\Roaming\Mathematica\SystemFiles\LibraryResources\W\
indows-x86-64\Working-lenovo-qq-5144-7404-36>C:\mingw-w64\mingw64\bin\
\x86_64-w64-mingw32-gcc-5.2.0.exe -shared -o \
"C:\Users\qq\AppData\Roaming\Mathematica\SystemFiles\LibraryResources\
\Windows-x86-64\Working-lenovo-qq-5144-7404-36\donothing.dll" -g -x c++ \
-I"C:\Program Files\Wolfram \
Research\Mathematica\10.3\SystemFiles\IncludeFiles\C" -I"C:\Program \
Files\Wolfram \
Research\Mathematica\10.3\SystemFiles\Links\MathLink\DeveloperKit\W\
indows-x86-64\CompilerAdditions\mldev64\include" "C:\Users\qq\AppData\
\Roaming\Mathematica\SystemFiles\LibraryResources\Windows-x86-64\W\
orking-lenovo-qq-5144-7404-36\donothing.c" -L"C:\Program \
Files\Wolfram \
Research\Mathematica\10.3\SystemFiles\Links\MathLink\DeveloperKit\W\
indows-x86-64\CompilerAdditions\mldev64\lib" -L"C:\Program \
Files\Wolfram \
Research\Mathematica\10.3\SystemFiles\Libraries\Windows-x86-64" \
2>&1
R:\temp\cc9bBS4s.o:donothing.c:(.data+0x0): undefined reference to \
`__gxx_personality_seh0'
R:\temp\cc9bBS4s.o:donothing.c:(.xdata+0x10): undefined reference to \
`__gxx_personality_seh0'
collect2.exe: error: ld returned 1 exit status
昨天,我运行相同的代码,它完美无缺。现在,我不知道出了什么问题。
同时,没有Eigen库的所有librarylink都运行良好。并且Eigen库没有损坏,因为我可以使用Eigen编译.cpp文件而没有问题。
如何解决这个问题?
更新
我不知道为什么我的问题被标记为重复而没有任何评论!我看了那个链接,但它并没有解决我的问题!我已经说过&#34;昨天它运作良好&#34;。我已经使用了选项&#34; -x c ++&#34;,我也试过&#34; -x c ++ -lstdc ++&#34;错误为__gxx_personality_seh0
而不是___gxx_personality_v0