我已經撰寫了一些我想在以下方法中與 matlab 集成的 C 代碼https://www.mathworks.com/help/matlab/matlab_external/publish-interface-to-shared-c-library-on-linux.html
- 第一步:在 Linux 上生成介面進展順利。
- 第二步:Define Missing Constructs 不是真的有必要,我的例子很簡單,它可以自動完成
- 構建介面是我遇到問題的地方。
這是我的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) 是引發錯誤的原因。這是完整的輸出:
使用 g 編譯器。生成的定義檔案defineintegrationTest.mlx 和資料檔案“integrationTestData.xml”包含MATLAB 支持的1 個構造的定義。使用 build(defineintegrationTest) 構建。
集成測驗庫的 MATLAB 介面
函式 int32 clib.integrationTest.addingNumbers(int32,int32)
構建介面檔案“integrationTestInterface.so”。錯誤使用 clibgen.internal.buildHelper(第 62 行)構建失敗,錯誤為:'/usr/bin/ld:找不到 -lting collect2:錯誤:ld 回傳 1 退出狀態'。
clibgen.LibraryDefinition/build (line 1297) 中的錯誤 clibgen.internal.buildHelper(obj, obj.LibraryInterface, '', directBuild);
myIntegrationTest(第 11 行)構建中的錯誤(defineintegrationTest)
錯誤的主要部分似乎是找不到 -lting collect2: error: ld returns 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 的內容時,我得到了實際上回傳 0 結果的 google 結果。
uj5u.com熱心網友回復:
事實證明,您應該制作 .so 檔案庫的前三個字母。所以我將 testing.so 更改為 libtesting.so 并重新運行相同的步驟并且它起作用了。感謝您的幫助 Cris Luengo,他回答了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318510.html
