Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Mathematica中的$SystemID不正确_C++_Wolfram Mathematica_Shared Libraries_32bit 64bit_Mathlink - Fatal编程技术网

C++ Mathematica中的$SystemID不正确

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

我正在尝试链接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
./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)
  • Symlink
    libML64i3.so
    库搜索路径中的某个位置
  • 链接到libML的静态版本,如中所述
  • 要处理编译时链接器错误,可以编译32位的应用程序(通过将
    -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吗?