在Visual Studio中构建MATLAB mex文件会得到"LNK2019 unresolved external symbol _mexPrintf referenced in functio
Building a MATLAB mex file in Visual Studio gives "LNK2019 unresolved external symbol _mexPrintf referenced in function mexFunction"?
我使用Visual Studio 2012 x64直接构建和调试MATLAB 2014a x64 mex文件(不使用MATLAB中的mex
命令)。我按照这个问题中的说明设置了一个名为test1
的Visual Studio项目。我遵循本教程编写了一个简单的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:PROJECTSmatlabmextest1Debugtest1.lib
> and object
> C:PROJECTSmatlabmextest1Debugtest1.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:PROJECTSmatlabmextest1Debugtest1.mexw64
> : fatal error LNK1120: 2 unresolved externals
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
这里有我遗漏的配置步骤吗?我准确地使用了这个答案中的步骤,但对于更新版本的MATLAB来说,它可能是不完整的?
您需要创建一个生成DLL(与控制台或GUI应用程序相反)的Visual Studio项目。MEX文件基本上是具有自定义扩展名的共享库(在Windows上为*.mexw32
或*.mexw64
)
错误消息表示链接器找不到可执行文件的入口点函数main()
,而动态库不存在该函数。
值得一提的是,您可以在MATLAB中运行mex -v ...
,这样它就可以向您显示用于调用编译器和链接器的确切命令。
编辑:
分步说明:
-
创建一个新的空VS项目来构建DLL(
Visual C++ > Win32 > Win32 console application
,然后在向导中将类型设置为DLL
) -
由于我们使用的是MATLAB x64,我们需要调整项目配置以生成64位二进制文件。从
Build
菜单中,选择Configuration Manager
。从下拉菜单中选择<New>
以创建新的平台配置,选择x64
并接受。 -
按照你提到的之前的说明
-
为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
MEX文件,你可以在MATLAB中作为一个正则函数调用它。
- CppSQLite 抛出"LNK2019: unresolved external symbol"错误
- Visual Studio中的wxwidgets应用程序给出错误"LNK2019 unresolved external symbol"
- 在 C++ 中嵌入 V8 会导致与 libcpp 相关的"unrecognized external symbol"错误
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 如何修复"unresolved external symbol _gladLoadGLLoader referenced in function _main"和"unresolved external
- 通过覆盖虚拟函数来获取'unresolved external symbol'
- 运行时动态加载库时出错"unresolved external symbol"
- 为什么 VS C++链接器返回具有混合 DLL 转发的"LNK2001: unresolved external symbol"?
- Visual Studio 2017 中的 MySQL 连接器/C++ 错误"Unresolved external symbol _get_driver_instance"
- CMake 和 Visual Studio 出现"unresolved external symbol"错误
- DLL 注入编译 "unresolved external symbol" Visual Studio C++
- "Error LNK2001: unresolved external symbol _main"仍然存在
- QT 单元测试 moc "unresolved external symbol" for QMetaObject
- 主外部功能的C++ "unresolved external symbol"
- 错误 : "error LNK2019: unresolved external symbol"
- 为什么我的代码生成"Unresolved external symbol"错误?
- 使用三角形库时的"unresolved external symbol _triangulate"
- 如何修复" Error LNK2019 : unresolved external symbol ... "
- 问题:"error LNK2019: unresolved external symbol"
- 为什么我会收到"unresolved external symbol"消息?