使用boost编译mexfunction时出现链接器错误

时间:2013-12-22 09:10:48

标签: c++ boost mex

我正在尝试在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中时才会出现这个问题

1 个答案:

答案 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

即可