2013-12-22 3 views
1

Я пытаюсь использовать boost в mexfunctions.Ошибка компоновщика при компиляции mexfunction с 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 

Но все-таки я получаю ту же ошибку. Как я могу это решить?

EDIT:

я могу использовать импульс в обычном визуальной Studio C++ проекта без каких-либо проблем. Проблема возникает только тогда, когда я помещаю ее в mexfunction.

+0

Какая команда компоновщика работает для вас? Возможно, у него есть подробный флаг для печати. –

+0

Я думаю, что это то, о чем вы просите. Команда errCode = runCmdInShell (cmdtool, cmdargs); где "cmdtool = " C: \ Program Files \ MATLAB \ R2012a \ sys \ perl \ win32 \ bin \ perl.exe "" C: \ Program Files \ MATLAB \ R2012a \ bin \ mex.pl "" и "cmdargs = -called_from_matlab -matlab "C: \ Program Files \ MATLAB \ R2012a" main.cpp -LC: \ Boost \ 1.55.0 \ VC \ 10.0 \ x64 \ stage \ lib -IC: \ Boost \ 1.55.0 \ VC \ 10.0 \ x64 -lboost_thread-vc100-mt-1_55 " , а возвращенный код ошибки - 2 – Optimus

ответ

1

Я знаю, что этот вопрос сейчас довольно старый, но у меня была аналогичная проблема с mex, и я мог бы решить проблему, указав не только путь поиска каталога библиотеки, но и также имя компилируемого объекта библиотеки.

Для этого я использовал следующую команду:

mex main.cpp -I<path/to/lib> -L<path/to/lib/objects> -l<object_name> 

Командная строка Опция -l используется, чтобы сообщить MEX связать указанную библиотеку объектов. Затем Mex попытается найти все, что добавлено в -l, и добавит .lib для окон и .LIBEXT для unix.

Вот пример с реальными путями:

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 

EDIT:

Я заметил, что определение BOOST_ALL_NO_LIB также помогает , потому что, когда я удаляю это определение, я снова получаю ошибку. Чтобы определить имя символа, вы можете использовать опцию командной строки -D, поэтому просто добавьте -DBOOST_ALL_NO_LIB

Смежные вопросы