0

我很难编译以下示例代码:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <engine.h>

int main(int argc, char **argv )
{
    Engine *m_pEngine;

    if (!(m_pEngine = engOpen("\0"))) {
        fprintf(stderr, "\nCan't start MATLAB engine\n");
        return EXIT_FAILURE;
    }

    std::cout << "I'm alive!" << std::endl;

    return 0;
}

假设使用引擎接口调用Matlab函数。使用以下编译器选项编译它:

g++ -Wall -pedantic main.cpp -o main -I/usr/local/MATLAB/R2013a/extern/include -L/usr/local/MATLAB/R2013a/bin/glnxa64 -leng -lmat -lut -lmx -std=c++11

给出一千条错误消息=>链接

在互联网和这个论坛上阅读和搜索后,我发现以下答案#1#2#3很有帮助,我可以编译相同的程序,只需将LD_LIBRARY_PATH我的系统设置如下:

declare -x LD_LIBRARY_PATH="/home/lukas/workspace_ros/devel/lib:/home/lukas/workspace_ros/devel/lib/x86_64-linux-gnu:/opt/ros/indigo/lib:/opt/ros/indigo/lib/x86_64-linux-gnu:/usr/local/MATLAB/R2013a/bin/glnxa64"

但是另一个共享相同变量(ROS)的程序不再工作,我收到以下错误消息:

lukas@ubuntu:~$ roscore
Traceback (most recent call last):
  File "/opt/ros/indigo/bin/roscore", line 62, in <module>
    import roslaunch
  File "/opt/ros/indigo/lib/python2.7/dist-packages/roslaunch/__init__.py", line 48, in <module>
    import rospkg
  File "/usr/lib/python2.7/dist-packages/rospkg/__init__.py", line 43, in <module>
    from .rospack import RosPack, RosStack, \
  File "/usr/lib/python2.7/dist-packages/rospkg/rospack.py", line 35, in <module>
    from xml.etree.cElementTree import ElementTree
  File "/usr/lib/python2.7/xml/etree/cElementTree.py", line 3, in <module>
    from _elementtree import *
ImportError: PyCapsule_Import could not import module "pyexpat"

所以我必须重新设置环境变量并再次注销才能使用 ROS。

所以在我看来,Matlab 和 ROS 实际上并没有看到和识别它们在那个环境变量中的路径。使用其中一种会排除另一种的资源。它们如何在同一个系统中共存?我应该如何设置这个变量?

更新#1: 根据迈克尔的建议,我尝试了以下 shell 命令:

LD_LIBRARY_PATH="/usr/local/MATLAB/R2013a/bin/glnxa64" g++ -Wall -pedantic main.cpp -o main -I/usr/local/MATLAB/R2013a/extern/include -L/usr/local/MATLAB/R2013a/bin/glnxa64 -leng -lmat -lut -lmex -std=c++11

编译!:) 所以对迈克尔投了赞成票。

问题仍然存在:如果我尝试运行该程序,我会收到以下错误消息:

:~$ ./main
./main: error while loading shared libraries: libeng.so: cannot open shared object file: No such file or directory

那是因为库是共享的,应该在运行时找到。任何想法???

问候

4

0 回答 0