我写了一些c++代码,我想在以下方法中与matlab集成https://www.mathworks.com/help/matlab/matlab_external/publish-interface-to-shared-c-library-on-linux.html
- 第一步:在Linux上生成接口。
- 第二步:定义缺失的结构是没有必要的,我的例子是如此简单,它可以自动完成
- Build Interface是我得到问题的地方。
这是我的matlab代码:
clc;
clibgen.generateLibraryDefinition(fullfile("testing.h"),...
"Libraries", fullfile("testing.so"),...
"PackageName", "integrationTest",...
"ReturnCArrays",false,... % treat output as MATLAB arrays
"Verbose",true)
defineintegrationTest;
summary(defineintegrationTest)
build(defineintegrationTest)
最后一行build(defineintegrationTest)抛出错误。以下是完整的输出:
使用c++编译器。生成的定义文件defineintegrationTest。和数据文件"integrationTestData.xml"包含MATLAB支持的1个构造的定义。建立使用构建(defineintegrationTest) .
MATLAB接口integrationTest图书馆
Functions int32 clib.integrationTest.addingNumbers(int32,int32)
构建接口文件'integrationTestInterface.so'。错误使用clibgen.internal.buildHelper(第62行)构建失败,错误:/usr/bin/ld: cannot find -lting collect2: error: ld returned 1 exit状态"。
clibgen错误。LibraryDefinition/build(第1297行)clibgen.internal.buildHelper (obj obj。
图书馆接口,",directBuild);myIntegrationTest错误(第11行)build(defineintegrationTest)
错误的主要部分似乎是无法找到- lcollect2: error: ld返回1退出状态的部分。我做了测试。因此使用以下行:
g++ - 0测试。p
g++ -shared -o测试。所以testing.o
我的测试示例非常简单。这是cpp文件。
#include "testing.h"
int addingNumbers(int a, int b){
return a + b;
}
这是头文件
#ifndef TESTING_ /* Include guard */
#define TESTING_
int addingNumbers(int a, int b);
#endif
我也试图使用g++共享库和意义旗,并得到了同样的错误。
g++ -shared -o测试。所以测试。o和意义
有谁知道这个库是什么或者我可以在哪里安装它吗?我已经得到了谷歌结果,实际上返回0结果,同时寻找有关-lting或libting或matlab ting的事情。
结果是,您应该使用。so文件库的前三个字母。所以我改变了测试。所以说libtesting。所以我重复了同样的步骤,它成功了。谢谢你的帮助,Cris Luengo,他回答了这个问题。