我正在尝试使用外部库生成一个mex函数。我使用的是Ubuntu 18和Matlab R2021a。
特别是,我想编译使用名为model的cpp库的file.cpp。我做的是
mex -I<path_library_include> -L<path_library_so_file> -lmodel.so -lboost_system -lstdc++ file.cpp -v
其中,在-I中,我将库的include路径放在-L中,即libmodel.so所在的路径中,然后我又添加了两个库,并在最后添加了我想要编译的源文件。
通过这种方式,我可以编译我的源代码,但当我尝试执行mex函数时,我会得到:
libmodel.so:无法打开共享对象文件:没有这样的文件或目录
我还测试了matlab外部的库,运行良好,这是我用来编译matlab 外部库的命令
gcc -Wall -I<path_library_include> -L<path_library_so_file> main.cpp -lmodel -lboost_system -lstdc++ -o main
Matlab可能有什么问题?
感谢273K给了我正确的方向。问题是LD_LIBRARY_PATH配置不好——事实上运行/sbin/ldconfig -v
的库不存在。因此,为了添加共享库,我在/etc/ld.so.conf.d/
中创建了一个名为mylib.conf
的新文件作为根目录,这并不重要,重要的是名称和扩展名。然后我运行
sudo ldconfig
在那之后,图书馆实际上运行
/sbin/ldconfig -v | grep model
其中model是我的库的名称。可以看到输出。