matlab mex 文件的共享库位置:

2023-11-27

我正在尝试编写一个使用 libhdf5 的 matlab mex 函数;我的 Linux 安装提供了 libhdf5-1.8 共享库和标头。然而,我的 Matlab 版本 r2007b 提供了 1.6 版本的 libhdf5.so。 (Matlab.mat文件 bootstrap hdf5,显然)。当我编译 mex 时,它在 Matlab 中出现段错误。如果我将 libhdf5 版本降级到 1.6(不是长期选项),代码可以正常编译并运行。

问题:我该如何解决这个问题?如何告诉 mex 编译过程链接到 /usr/lib64/libhdf5.so.6 而不是 /opt/matlab/bin/glnxa64/libhdf5.so.0 ?当我尝试使用以下方法执行此操作时-Wl,-rpath-link,/usr/lib64在我的编译中,我收到如下错误:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../x86_64-pc-linux-gnu/bin/ld: warning: libhdf5.so.0, needed by /opt/matlab/matlab75/bin/glnxa64/libmat.so, may conflict with libhdf5.so.6
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

    mex: link of 'hdf5_read_strings.mexa64' failed.

make: *** [hdf5_read_strings.mexa64] Error 1

确认。最后的手段是下载 hdf5-1.6.5 标头的本地副本并使用它,但这不是面向未来的(Matlab 版本升级是我的未来。)。有任何想法吗?

编辑:根据 Ramashalanka 的出色建议,我

A)被称为mex -v得到 3gcc命令;最后是链接器命令;

B) 使用 a 调用该链接器命令-v得到collect命令;

C) 称之为collect2 -v -t和其余的标志。

我的输出的相关部分:

/usr/bin/ld: mode elf_x86_64
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/crtbeginS.o
hdf5_read_strings.o
mexversion.o
-lmx (/opt/matlab/matlab75/bin/glnxa64/libmx.so)
-lmex (/opt/matlab/matlab75/bin/glnxa64/libmex.so)
-lhdf5 (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libhdf5.so)
/lib64/libz.so
-lm (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/libm.so)
-lstdc++ (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libstdc++.so)
-lgcc_s (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libgcc_s.so)
/lib64/libpthread.so.0
/lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
-lgcc_s (/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libgcc_s.so)
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/crtendS.o
/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/../../../../lib64/crtn.o

所以,实际上libhdf5.so from /usr/lib64正在被引用。然而,我相信,这是被环境变量覆盖的LD_LIBRARY_PATH,我的 Matlab 版本会在运行时自动设置,以便它可以找到自己的版本,例如libmex.so, etc.

我认为crt_file.c示例可以工作 b/c 它不使用我正在使用的功能(H5DOpen,从 1.6 到 1.8 的过程中有一个签名更改(是的,我正在使用-DH5_USE_16_API)),或者,不太可能,b/c 它没有触及 Matlab 内部需要 hdf5 的部分。确认。


以下内容在我的系统上有效:

  1. 安装 hdf5 版本 1.8.4 (您已经完成了此操作:我安装了源代码并编译以确保它与我的系统兼容,我获得了 gcc 版本并且获得了静态库 - 例如,为我的系统提供的二进制文件是icc具体的)。

  2. 制作目标文件。您已经有了自己的文件。我用的是简单的h5_crtfile.c from here(最好先从这个简单的文件开始寻找警告)。我变了main to mexFunction与通常的参数并包含mex.h.

  3. 指定static1.8.4 您想要显式加载的库(不需要 -L 的完整路径)并且不包含-lhdf5 in the LDFLAGS。包括一个-t选项,这样您就可以确保没有加载动态 hdf5 库。你还需要-lz, with zlib安装。对于达尔文,我们还需要一个-bundle in LDFLAGS:

    mex CFLAGS='-I/usr/local/hdf5/include' LDFLAGS='-t /usr/local/hdf5/lib/libhdf5.a -lz -bundle' h5_crtfile.c -v
    

    对于 Linux,您需要一个等效的位置无关调用,例如fPIC有可能-shared,但是我没有带有matlab许可证的linux系统,所以无法检查:

    mex CFLAGS='-fPIC -I/usr/local/hdf5/include' LDFLAGS='-t /usr/local/hdf5/lib/libhdf5.a -lz -shared' h5_crtfile.c -v
    
  4. Run the h5_crtfile墨西哥文件。这在我的机器上运行没有问题。它只是执行 H5Fcreate 和 H5Fclose 在当前目录中创建“file.h5”,当我调用file file.h5 I get file.h5: Hierarchical Data Format (version 5) data.

请注意,如果我包括-lhdf5上面的步骤 3 中,然后当我尝试运行可执行文件时,matlab 中止(因为它随后使用 matlab 的动态库,对我来说版本是 1.6.5),所以这肯定解决了我系统上的问题。

谢谢你的提问。我上面的解决方案对我来说肯定比我之前所做的要容易得多。希望以上内容对您有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab mex 文件的共享库位置: 的相关文章

  • Fedora 21 带 clang,不带 gcc

    你能 合理地 让 Fedora 21 变得只有 llvm clang libc libc abi 吗 我发现有些东西暗示不可以 但它们都已经有 3 岁了 从那时起 llvm clang 已经取得了长足的进步 通过全新安装 我尝试了 yum
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • c - 将 .data 发送到不同的部分

    我想把其中的符号 data为特定 C 文件生成的节并将它们放在不同的节中 例如 mydata 在最终的可执行文件中 例如 normaldata c char my str this should appear in data special
  • 在64位操作系统上以32位模式和64位模式编译ioctl函数的执行有什么不同?

    我有 64 位 Enterprise SuSE 11 我有一个应用程序 它打开 HIDRAW 设备并在其上操作 ioctl 函数以从该设备获取原始信息 如下所示 struct hidraw devinfo devinfo int fd op
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 错误:“std::this_thread”尚未声明

    我尝试使用 std this thread sleep for 函数但收到错误 error std this thread has not been declared 包括标志 GLIBCXX USE NANOSLEEP 还需要什么来强制它
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • Gcc 4.2 版本缺失

    在我的带有 osx lion 和 XCode 4 1 的新 macbook pro 上 我遇到了一些 gcc 问题 In usr bin我找不到gcc 4 2 我只有以下版本 i686 apple darwin11 llvm gcc 4 2
  • 从 imread 返回的 ndims

    我正在从文件夹中选取图像 尺寸为128 128 为此 我使用以下代码行 FileName PathName uigetfile jpg Select the Cover Image file fullfile PathName FileNa
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • CPU Relax 指令和 C++11 原语

    我注意到许多使用特定于操作系统的原语实现的无锁算法 例如所描述的自旋锁here http locklessinc com articles locks 使用 Linux 特定的原子原语 经常使用 cpurelax 指令 使用 GCC 可以通
  • getappdata 在 MATLAB 中返回空矩阵

    我有一段代码 我在其中使用setappdata然后我使用以下方式调用数据getappdata即使它不为空 它也会返回一个空矩阵 我的一段简化代码如下 function edit1 Callback hObject eventdata han
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005

随机推荐

  • 模板引擎建议[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找模板引擎 要求 在 JVM 上运行 Java 很好 Jython JRuby 等等 可以在 servlet 之外使用 与 JSP 不同 是灵活的 模板存储的地方 JSP和很
  • 使用 Python 计算点密度

    我有一个来自世界特定地区地理数据的 X 和 Y 坐标列表 我想根据每个坐标在图表中的位置为其分配一个权重 例如 如果一个点位于其周围有很多其他节点的地方 则该点位于高密度区域 因此具有较高的权重 我能想到的最直接的方法是围绕每个点绘制单位半
  • 如何在React Native中为不同的IOS设备设置字体大小

    在react native中 我设计了一个示例 当我在不同的IOS设备中检查它时 这是我的代码 render return
  • ng-repeat - html 循环内的计数

    是否有办法计算一个项目 然后将其显示在循环之外 tr td value total td tr tr td Total Of All Values total td tr 我尝试过使用ng init 没有成功 因为我认为它每次都是压倒性的
  • 初始化二维字符串数组

    如何在C 中声明一个二维字符串数组 以及如何将该字符串写入文件 typedef std vector
  • Java修改Python中的UTF-8字符串

    我正在通过 Python 与 Java 应用程序交互 我需要能够构造包含 UTF 8 字符串的字节序列 Java 使用修改后的 UTF 8 编码DataInputStream readUTF Python 不支持 但至少 有人能指出我在 P
  • 如何在 OSX 10.9 (Mavericks‎) 上安装 pybluez 或 LightBlue

    我尝试在 OS X 10 9 上安装 bluez 和 Light Blue 但出现错误 有人在 Mavericks 上成功安装过这些吗 我收到 LightBlue 的此错误 BUILD TARGET LightAquaBlue OF PRO
  • Application.ThreadException 与 AppDomain.UnhandledException

    首先是一些背景知识 我有一个多线程 WinForms 应用程序 它正在与本机 dll 进行互操作 该应用程序有时会因未处理的异常而崩溃 我们正在尝试调查为什么会发生这种情况 为了方便起见 我正在创建一个全局异常处理程序 并计划从中生成进程转
  • 如何使用 docker-compose 从多个私有注册表中提取数据?

    我尝试从两个不同的项目注册表 gitlab 容器注册表 中提取两个映像 所有这一切都在一个docker compose yml file 我该如何配置我的gitlab ci yml或配置变量 无论有效 以便正确提取我的图像而不会出现任何访问
  • 将工件上传到 Nexus,无需 Maven

    我有一个生成版本化构建工件的非 Java 项目 我想将其上传到 Nexus 存储库 由于该项目不是 Java 因此它不使用 Maven 进行构建 我不想引入 Maven POM 文件只是为了将文件导入 Nexus 博客上的 Nexus RE
  • SQLAlchemy 可以显式交叉连接吗?

    是否可以使用 SQLAlchemy 生成显式 CROSS JOIN 查询 如下例所示 SELECT FROM foo CROSS JOIN bar 如果是 怎么办 我猜想类似的事情 session query Foo crossjoin B
  • SQL Server 2008 和.Net 4.0?

    有谁知道我是否可以从 SQL Server 2008 加载 net 4 0 程序集 我们特别关注具有自定义数据扩展的 SQL 报告 我注意到SQL Server 2008 Business Intelligence Studio目前似乎不支
  • 在 C# 中将对象从 ConcurrentQueue 中出列

    嘿 我正在尝试在 C 中为异步服务器实现 ConcurrentQueue 一旦收到完整的消息 项目就会排队 为了使消息出队 我创建了少量线程来完成出队和服务请求的工作 这是不够的 因为每个线程都使用 while 循环 出于明显的原因 它会消
  • 在 R 中查看包中的所有内容(不仅仅是对象)

    这可能是一个新手的问 题 但我想我做了功课 但还没有找到答案 我希望找到 所以我将其发布在这里寻求一些帮助 类似的问题之前也被问过 但从我发现的情况来看 除了 昂贵 的解决方案 需要 R 编辑器 之外 没有任何答案可以帮助我解决当前的问题
  • 在IIS服务器上执行javascript

    我有以下情况 客户使用 JavaScript 和 jQuery 创建一个复杂的网站 我们希望在服务器 IIS 上使用 JavaScript 和 jQuery 原因如下 技能传授 我们希望在服务器上使用 JavaScript 和 jQuery
  • Winforms RichTextBox:如何确定有多少行文本可见?

    我有一个包含 RichTextBox 的 Winforms 应用程序 如何确定当前显示的可见文本行数 原因 我想将插入符号滚动到 RichTextBox 的中间 我可以用RichTextBox ScrollToCaret 但这会将插入符号置
  • 如何检索 DynamoDB 全局二级索引中的行位置和总计?

    我正在实现一个由以下支持的排行榜DynamoDB 以及他们的Global Secondary Index 如开发者指南中所述 http docs aws amazon com amazondynamodb latest developerg
  • Objective C NSString* 属性保留计数奇怪之处

    我有以下示例类 Test h interface Test UIButton NSString value id initWithValue NSString newValue property copy NSString value Te
  • 有没有办法获得给定数量的输入,其中该数量是由 C++ 编译时模板给出的?

    例如 假设我创建一个如下所示的类 template
  • matlab mex 文件的共享库位置:

    我正在尝试编写一个使用 libhdf5 的 matlab mex 函数 我的 Linux 安装提供了 libhdf5 1 8 共享库和标头 然而 我的 Matlab 版本 r2007b 提供了 1 6 版本的 libhdf5 so Matl