我正在尝试在mexfunctions中使用boost。
以下是我的代码
的main.cpp
#include <mex.h>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("test boost");
}
我使用以下命令编译它
mex main.cpp -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -IC:\Boost\1.55.0\VC\10.0\x64
然后我收到此链接错误
LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_55.lib'
C:\PROGRA~1\MATLAB\R2012A\BIN\MEX.PL: Error: Link of 'main.mexw64' failed.
然后我再次编译,
mex main.cpp -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -IC:\Boost\1.55.0\VC\10.0\x64 -llibboost_thread-vc100-mt-s-1_55
但我仍然得到同样的错误。我该如何解决这个问题?
编辑:
我可以在普通的visual studio c ++项目中使用boost而没有任何问题。只有当我把它放在mexfunction中时才会出现这个问题
答案 0 :(得分:1)
我知道这个问题现在已经很老了,但我遇到了与mex类似的问题,我可以通过不仅指定库目录搜索路径,而且还指定已编译库对象的名称来解决它。
为此,我使用了以下命令:
mex main.cpp -I<path/to/lib> -L<path/to/lib/objects> -l<object_name>
命令行选项-l
用于告诉mex链接指定的对象库。然后,Mex将尝试查找添加到-l
的任何内容,并为Windows添加.lib,为unix添加.LIBEXT。
这是一个真实路径的例子:
mex main.cpp -IC:\boost_1_54_0 -LC:\boost_1_54_0\release -lthread
最后在你的情况下,我建议尝试:
mex main.cpp -IC:\Boost\1.55.0\VC\10.0\x64 -LC:\Boost\1.55.0\VC\10.0\x64\stage\lib -lthread
修改强>
我注意到定义BOOST_ALL_NO_LIB
也有帮助,因为当我删除此定义时,我再次收到错误。
要定义符号名称,可以使用命令行选项-D
,只需添加-DBOOST_ALL_NO_LIB