找-llibMatlabDataArray MinGW clibgen构建失败

7视图(30天)
我用Matlab2021a。我想包装现有的c++库用于Matlab。我在Linux做了包装,我现在试图做同样的事情在Windows。我comiler我用MinGW 6.3.0安装的使用Mathworks提供的下载:
我能够运行clibgen。generateLibraryDefinition命令,但是当我试着做一个构建时,我得到链接器错误。缩小的起源问题,我跟着一个有用的简单的例子。在以下链接提供的说明:
我做了libfive。h和libfive。cpp文件按照这些指令。然后构建一个共享库使用MinGW的g++。
美元g++ - c - fpic libfive。cpp - o libfive.o
美元g++ libffive。o - shared - o libfive_win.so
从Matlab中,我产生了库定义。
> > clibgen.generateLibraryDefinition (“libfive.h”,“库”,“libfive_win.so”)
使用MinGW64编译器编译器(c++)。
生成的definelibfive定义文件。“libfiveData mlx和数据文件。xml的包含定义1构造由MATLAB。金宝app
构建使用构建(definelibfive)。
包含的_win后缀区分文件是一个windows共享库,因为我做了相同的测试Linux。不过,当我试着做一个构建,我得到以下错误:
> >构建(definelibfive)
建筑接口文件“libfiveInterface.dll”。
错误使用clibgen.internal.buildHelper(第62行)
构建失败与错误:
“C: / ProgramData / MAT金宝appLAB / SupportPackages / R2021a_1/3P.instrset / mingw_w64.instrset / bin / lib / gcc / x86_64-w64-mingw32/6.3.0 / . . / . . / . . / . . / . . / x86_64-w64-mingw32 / bin / ld.exe:
不能发现-l-LC: \ MATLAB \ R2021a \走读生\ lib \ win64 \ mingw64
C: / ProgramData / MAT金宝appLAB / SupportPackages / R2021a_1/3P.instrset mingw_w64.instrset / bin / lib / gcc / x86_64-w64-mingw32/6.3.0 / . . / . . / . . / . . / . . / x86_64-w64-mingw32 / bin / ld.exe:
不能找到-llibMatlabDataArray
collect2。exe:错误:ld返回1退出状态
”。
错误在clibgen。LibraryDefinition /构建(第1297行)
obj.LibraryInterface clibgen.internal.buildHelper (obj,,directBuild);
错误是一样的对于这个简单的示例情况和更复杂的情况。MATLAB在C: \ \ R2021a \走读生\ lib \ win64 \ mingw64 libMatlabDataArray。自由存在。

接受的答案

内森·帕里什
内森·帕里什 2021年8月26日
这个问题的原因是,Matlab未能填写库名称,需要提供给链接器(libfive_win.so)。图书馆由MinGW必须有一个. lib文件扩展名。这是因为clibgen.internal.build函数使用
idx = strfind (nameExt,“lib”);
res = nameExt (1: idx-1);
name = (“- l”res);
在我的例子中,MinGW扩展成立,所以导致strfind返回一个空数组和名称成为- l。
链接器然后解析“- l lc: \ MATLAB \ R2021a \走读生\ lib \ win64 \ mingw64”作为一个令牌导致这个错误。
如果你简单地重命名库文件,它将导致链接错误,因为内部生成的库将寻找一个图书馆的旧名称会导致
错误使用它
不能加载界面库:“[…]\ libfive \ libfiveInterface.dll”。原因:指定的模块
可以不被发现。
确保c++接口库的依赖库添加到运行时的路径。
相关的文档
解决方案是重建图书馆,这样输出libfive名称。自由,然后按照正常模式。
医生clib.libfive.five%显示文档
clib.libfive.five ()%运行函数

更多的答案(0)

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!