gpt4 book ai didi

c - Mex无法正确链接,导致 "dyld: lazy symbol binding failed: Symbol not found: _mxGetNumberOfDimensions_700"

转载 作者:行者123 更新时间:2023-11-30 17:12:22 26 4
gpt4 key购买 nike

我一直在尝试重新编译我的新机器上的一些旧代码,但它始终失败。我已将问题简化为一个或多或少的最小示例。

代码:

#include <math.h>
#include <mat.h>
#include <matrix.h>

int main(int argc, char *argv[]) {
const char *name;
int ndim;
MATFile *pmat;
mxArray *pa;
pmat = matOpen("../orders/order_fractal_C1.mat", "r");
pa = matGetNextVariable(pmat, &name);
ndim = mxGetNumberOfDimensions(pa);
return 0;
}

使用命令编译

$MATLABROOT/bin/mex -v -f ~/matopts.sh CFLAGS="" -output test test.c

matopts.sh 文件指示 mex 使用 gcc-5(通过自制软件安装)。

代码编译时没有错误或警告,但在执行 ./test 时我得到

dyld: lazy symbol binding failed: Symbol not found: >_mxGetNumberOfDimensions_700 Referenced from: /Users/keith/Dropbox/Code/sphere/newparallel/C/./test Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _mxGetNumberOfDimensions_700 Referenced from: /Users/keith/Dropbox/Code/sphere/newparallel/C/./test Expected in: /usr/lib/libSystem.B.dylib

如果我不包含最后一行代码,一切都很好。出了什么问题?为什么它“期望”符号位于libSystem.B.dylib中,而不是matrix.h中?

编辑:整个matopts.sh文件相当大,我所做的只是更改

CC='gcc'

CC='gcc-5'

在两个实例中,因此它不会使用 clang。

编辑2:我决定重新使用 clang,认为最好接受 Matlab 想要做事的方式。

现在我可以让它工作,但只有在从 Matlab 内部执行命令时,要么将其编译为 mexFunction 并在 Matlab 中调用该函数,要么使用 编译它-client引擎,然后使用!./test运行。

但是,如果我尝试从 Matlab 外部运行它,我会得到与以前相同的错误。

最佳答案

您需要将 -largeArrayDims (注意大小写)添加到您的 mex 命令中。

如果您仍然遇到问题,请确保您没有在任何地方定义 MX_COMPAT_32

关于c - Mex无法正确链接,导致 "dyld: lazy symbol binding failed: Symbol not found: _mxGetNumberOfDimensions_700",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31613865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com