我正在尝试在mathematica中链接Mathlink库。我使用的是x86_64-suse-linux操作系统,但当我在Mathematica中检查$ SystemID时,它告诉我我使用的是“Linux”而不是“Linux-x86-64”。
这是一个问题,因为如果我尝试将库链接为
g++ cpp2mma.cpp -L/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux/CompilerAdditions/ -lML32i3 -lpthread -lstdc++ -lm -lrt
(32位版本 - Linux /中唯一的库)
我收到以下错误:
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: skipping incompatible
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux/CompilerAdditions//libML32i3.so when searching for -lML32i3
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: skipping incompatible
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux/CompilerAdditions//libML32i3.a when searching for -lML32i3
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lML32i3
collect2: ld returned 1 exit status
但是,如果我尝试将其链接为
g++ cpp2mma.cpp -L/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux-x86-64/CompilerAdditions/ -lML64i3 -lpthread -lstdc++ -lm -lrt
它编译得很好,但如果我尝试运行它,我会收到以下错误:
./a.out: error while loading shared libraries: libML64i3.so: cannot open shared object file: No such file or directory
这个文件显然存在,因为运行'locate libML64i3.so'会产生:
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Libraries/Linux-x86-64/libML64i3.so
/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux-x86-64/CompilerAdditions/libML64i3.so
我认为问题在于Mathematica认为我没有运行32位系统吗?如果是这样,我该怎么办?
答案 0 :(得分:2)
问题不在Mathematica中。内核永远不会运行 - 从您正在编译和启动ELF可执行文件的e系统的角度来看。 libML64i3会为你启动一个内核,但它不会在这里加载。
有几种方法可以让链接器在运行时找到libML64i3.so
libML64i3.so
到LD_LIBRARY_PATH
的目录(通常不是一个好主意)/etc/ld.so.conf.d
或/etc/ld.so.conf
中的条目来表明/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux-x86-64/CompilerAdditions
应该是图书馆搜索路径的一部分 - 请查看ldconfig(8)
。libML64i3.so
已存在于库搜索路径中要处理编译时链接器错误,您可以32位编译应用程序(将-m32
传递给g++
)。如果你这样做了,你会得到一个关于无法找到32位版本的libML的运行时消息,这需要与上面相同的解决方案。
我不确定为什么$ SystemID返回一个值,表明你正在运行32位内核。这可能与你如何开始Mathematica有关。在CentOS 5-7-x86_64上,我有
host 11% ls -l $(which math)
lrwxrwxrwx 1 root root 51 Nov 8 16:27 /usr/local/bin/math -> \
/usr/local/Wolfram/Mathematica/8.0/Executables/math
host 12% math
Mathematica 8.0 for Linux x86 (64-bit)
Copyright 1988-2011 Wolfram Research, Inc.
In[1]:= $SystemID
Out[1]= Linux-x86-64