设置LD_LIBRARY_PATH会导致与现有程序冲突

时间:2015-03-04 18:08:45

标签: c++ linux compiler-errors matlab-compiler g++4.8

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

#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;
}

假设使用engine接口调用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

给出千条错误消息=&gt; Link

在互联网上阅读和搜索后,我发现以下答案#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

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

问候

0 个答案:

没有答案
相关问题