Matlab C++ 集成,什么是 libting?

Matlab C++ integration, what is libting?

我已经写了一些c++代码,我想在下面的方法中与matlab集成https://www.mathworks.com/help/matlab/matlab_external/publish-interface-to-shared-c-library-on-linux.html

  1. 第一步:在 Linux 上生成接口进展顺利。
  2. 第二步:Define Missing Constructs 不是必须的,我的例子很简单,可以自动完成
  3. 构建接口是我遇到问题的地方。

这是我的 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) 引发了错误。这是完整的输出:

Using g++ compiler. Generated definition file defineintegrationTest.mlx and data file 'integrationTestData.xml' contain definitions for 1 constructs supported by MATLAB. Build using build(defineintegrationTest).

MATLAB Interface to integrationTest Library

Functions int32 clib.integrationTest.addingNumbers(int32,int32)

Building interface file 'integrationTestInterface.so'. Error using clibgen.internal.buildHelper (line 62) Build failed with error: '/usr/bin/ld: cannot find -lting collect2: error: ld returned 1 exit status '.

Error in clibgen.LibraryDefinition/build (line 1297) clibgen.internal.buildHelper(obj, obj.LibraryInterface, '', directBuild);

Error in myIntegrationTest (line 11) build(defineintegrationTest)

错误的主要部分似乎是 cannot find -lting collect2: error: ld returned 1 exit status ' 部分。我使用以下行制作了 testing.so:

g++ -o testing.o -O3 testing.cpp

g++ -shared -o testing.so 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++ 创建带有 -lting 标志的共享库,但得到了同样的错误。

g++ -shared -o testing.so testing.o -lting

有谁知道这个库是什么或者我可以在哪里安装它?在查找有关 -lting 或 libting 或 matlab ting 的内容时,我得到 google 结果实际上 return 0 结果。

原来你应该把你的.so文件的前三个字母设为lib。所以我将 testing.so 更改为 libtesting.so 并重新运行相同的步骤并且它起作用了。感谢 Cris Luengo 的帮助,他回答了这个问题。