Matlab集成C++共享库构建时报错找不到-lting,请问libting是什么?
问题根因
你遇到的cannot find -lting错误不是系统缺少名为libting.so的依赖库,属于参数解析异常触发的错误,核心原因有两个:
- Linux下链接器的
-l参数遵循固定命名规则:-lxxx会自动搜索名为libxxx.so的共享库,你之前生成的共享库名为testing.so,没有标准的lib前缀,本身不符合链接器的查找规则 - Matlab的clibgen工具在解析你传入的库名字符串时出现异常截断,把
testing误识别为ting,才会出现查找libting.so的错误提示
解决步骤
1 重新生成符合规范的共享库
执行以下命令重新编译C++代码,注意添加-fPIC参数(Linux共享库强制要求的位置无关代码标识),同时给共享库添加标准lib前缀:
# 编译目标文件 g++ -fPIC -O3 -c testing.cpp -o testing.o # 生成命名符合规范的共享库 g++ -shared -o libtesting.so testing.o
2 修改Matlab调用参数
调整clibgen.generateLibraryDefinition的参数,显式指定库搜索路径,避免路径解析错误:
clc; currentPath = pwd; clibgen.generateLibraryDefinition(fullfile(currentPath, "testing.h"),... "Libraries", "testing",... % 直接写库名,clibgen会自动补全lib前缀和.so后缀 "LibraryPaths", currentPath,... % 显式指定库文件所在路径 "PackageName", "integrationTest",... "ReturnCArrays",false,... "Verbose",true) defineintegrationTest; summary(defineintegrationTest) build(defineintegrationTest)
3 配置共享库搜索路径
在启动Matlab的终端执行以下命令,将当前目录加入系统共享库搜索路径:
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
完成以上操作后重新运行Matlab代码即可正常完成接口构建。
内容的提问来源于stack exchange,提问作者moviemaker24
相关产品推荐
相关产品推荐

