Mathematica中的$SystemID不正确
Incorrect $SystemID in Mathematica
我正在尝试在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。所以的收益率:
/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位系统,这是正确的吗?如果有,我该怎么办?
问题不在Mathematica。内核永远不会运行——从系统的角度来看,您正在编译和启动一个ELF可执行文件。libML64i3将为您启动一个内核,但它不会在这里加载。
有几种方法可以让链接器在运行时找到libML64i3.so
- 通过
LD_LIBRARY_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
已经在图书馆搜索路径 链接到libML的静态版本,在这个StackOverflow帖子中描述。
要处理编译时链接器错误,可以将应用程序编译为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
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- Mathematica中的$SystemID不正确