C++ Mathematica中的$SystemID不正确
我正在尝试链接mathematica中的Mathlink库。我使用的是x86_64-suse-linux操作系统,但当我在Mathematica中检查$SystemID时,它告诉我我使用的是“linux”而不是“linux-x86-64” 这是一个问题,因为如果我尝试将库链接为C++ Mathematica中的$SystemID不正确,c++,wolfram-mathematica,shared-libraries,32bit-64bit,mathlink,C++,Wolfram Mathematica,Shared Libraries,32bit 64bit,Mathlink,我正在尝试链接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/CompilerAdd
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
./a.out: error while loading shared libraries: libML64i3.so: cannot open shared object file: No such file or directory
但是,如果我尝试将其链接为
g++ cpp2mma.cpp -L/usr/local/Wolfram/Mathematica/8.0/SystemFiles/Links/MathLink/DeveloperKit/Linux-x86-64/CompilerAdditions/ -lML64i3 -lpthread -lstdc++ -lm -lrt
它编译得很好,但如果我尝试运行它,会出现以下错误:
/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
./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位系统,对吗?如果是这样,我该怎么办?问题不在数学中。内核从未运行过——从e系统的角度来看,您正在编译和启动ELF可执行文件。libML64i3将为您启动一个内核,但它不会在这里加载 有几种方法可以让链接器在运行时查找
libML64i3.so
LD\u LIBRARY\u PATH
导出包含libML64i3.so的目录(通常不是一个好主意)/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
库搜索路径中的某个位置-m32
传递到g++
)。如果这样做,您将收到一条运行时消息,抱怨无法找到32位版本的libML,这将需要与上面相同的解决方案
我不知道为什么$SystemID返回一个值,表示您正在运行32位内核。这可能与你如何开始学习数学有关。在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
你肯定在使用32位版本的Mathematica。您从系统信息[“内核”,“ReleaseID”]中获得了什么价值?您能发布cpp2mma.cpp吗?