我很难尝试编译以下示例代码:
#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
这是因为库是共享的,应该在运行时找到。 任何想法???
问候