gpt4 book ai didi

c++ - 在 Visual Studio 中构建 MATLAB mex 文件会得到 "LNK2019 unresolved external symbol _mexPrintf referenced in function mexFunction"?

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:49 25 4
gpt4 key购买 nike

我正在使用 Visual Studio 2012 x64 直接构建和调试 MATLAB 2014a x64 mex 文件(不使用 MATLAB 中的 mex 命令)。我按照 this question 中的说明进行操作设置名为 test1 的 Visual Studio 项目。我关注了this tutorial编写一个简单的 mex 文件,test1.cpp:

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

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("Hello World!\n");
}

构建这个解决方案给我这样的信息:

> 1>------ Build started: Project: test1, Configuration: Debug Win32
> ------ 1> Creating library C:\PROJECTS\matlab\mex\test1\Debug\test1.lib
> and object
> C:\PROJECTS\matlab\mex\test1\Debug\test1.exp
> 1>test1.obj : error LNK2019: unresolved external symbol _mexPrintf
> referenced in function _mexFunction 1>MSVCRTD.lib(crtexe.obj) : error
> LNK2019: unresolved external symbol _main referenced in function
> ___tmainCRTStartup 1>C:\PROJECTS\matlab\mex\test1\Debug\test1.mexw64
> : fatal error LNK1120: 2 unresolved externals
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这里是否缺少配置步骤?我使用了 this answer 中的步骤完全正确,但对于较新版本的 MATLAB,它可能不完整?

最佳答案

您需要创建一个生成 DLL(而不是控制台或 GUI 应用程序)的 Visual Studio 项目。 MEX 文件基本上是具有自定义扩展名的共享库(*.mexw32 或 Windows 上的 *.mexw64)

错误信息表示链接器找不到入口函数main()对于可执行文件,对于动态库不存在。

对于它的值(value),你可以运行 mex -v ...在 MATLAB 中,它会向您显示用于调用编译器和链接器的确切命令。


编辑:

分步说明:

  • 创建一个新的空 VS 项目来构建 DLL(Visual C++ > Win32 > Win32 console application 然后在向导中将类型设置为 DLL)

  • 由于我们使用的是 MATLAB x64,因此我们需要调整项目配置以生成 64 位二进制文​​件。来自 Build菜单,选择 Configuration Manager .从下拉菜单中选择 <New>要创建新的平台配置,请选择 x64并接受。

  • 关注上一个instructions你提到了

  • 为 MEX 文件添加 C/C++ 源代码

    #include "mex.h"
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
    plhs[0] = mxCreateString("hello world");
    }
  • 在“发布”模式下将平台切换到“x64”,然后构建项目。现在你应该有一个 somefile.mexw64您可以在 MATLAB 中将其作为常规函数调用的 MEX 文件。

关于c++ - 在 Visual Studio 中构建 MATLAB mex 文件会得到 "LNK2019 unresolved external symbol _mexPrintf referenced in function mexFunction"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220193/

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