フィルターのクリア

created a shared library(.so ) using matlab engine but unable to call it from a program

2 ビュー (過去 30 日間)
shome
shome 2015 年 11 月 19 日
コメント済み: Titus Edelhofer 2015 年 11 月 19 日
i created a cpp file to call a sorting function in matlab through matlab engine. i built it as a .so file. The library files & the main are attached herewith
call_matlab_processing.h
int call_matlab_processing(double array[],int sorted_indices[], int size_array);
call_matlab_processing.cpp
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#include <iostream>
int call_matlab_processing(double array[],int sorted_indices[], int size_array)
{
// its just a sorting algo, sorting being implemented by matlab
double * sorted;
double *indices;
//
Engine *ep;
mxArray *T = NULL, *result = NULL, *indices_matlab=NULL;
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return 1;
}
T = mxCreateDoubleMatrix(1,size_array, mxREAL);
memcpy((void *)mxGetPr(T), (void *)array, size_array*sizeof(double));
//
engPutVariable(ep, "T", T);
engEvalString(ep, "[D,I] = sort(T,'descend')");
engEvalString(ep, ";");
engEvalString(ep, "figure,plot(D);");
engEvalString(ep, "dlmwrite('myFile.txt',I)");
result = engGetVariable(ep,"D");
indices_matlab = engGetVariable(ep,"I");
//
sorted=(double *)mxGetData(result);
indices=(double *)mxGetData(indices_matlab);// casting as int * gave wrong results
//
for(int i = 0; i < size_array;i++)
{
array[i]=*sorted;
sorted_indices[i]=*indices;
sorted++;
indices++;
}
//
int goahead=fgetc(stdin);
//
mxDestroyArray(T);
mxDestroyArray(result);
mxDestroyArray(indices_matlab);
//
engEvalString(ep, "close;");
engClose(ep);
//
return 0;
}
so: libcall_matlab_processing
main.cpp:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#define BUFSIZE 256
#include <call_matlab_processing.h>
int main()
{
int size_array=10;
//
double array[10]={ 10, 5, 12, 27, 93, 19, 1, 26, 58, 74 };
int sorted_indices[10]={1,2,3,4,5,6,7,8,9,10};
//
int result=call_matlab_processing(array,sorted_indices,10);
for (int i=0;i<10;i++)
{
std::cout << "sorted_array= " <<array[i]<< " indices="<< sorted_indices[i] <<std::endl;
}
//
std::cout << "Done"<< std::endl;
return EXIT_SUCCESS;
}
main.cpp calls the above .so file. when i tried to build main i got so many errors: bin/ld: warning: libut.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libeng.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmat.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libeng.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmwcpp11compat.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libeng.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmwresource_core.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmwi18n.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmwfl.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libmwMATLAB_res.so, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_date_time.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_signals.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_system.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_thread.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_log.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libboost_log_setup.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libicudata.so.49, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) make[2]: Leaving directory `/home/shome/temp_codes/matlab_cpp_interface_codes/matlab_sort_using_lib/build' /usr/bin/ld: warning: libicuuc.so.49, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libicui18n.so.49, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) /usr/bin/ld: warning: libicuio.so.49, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so, not found (try using -rpath or -rpath-link) //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::catenate::emptyArrayColumnsDimensionMismatch::emptyArrayColumnsDimensionMismatch()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `fl::except::IUserException::ToUstringImpl() const' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::legacy_two_part::badformat_mx::badformat_mx()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `resource_core::BaseMsgID::getName() const' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::legacy_two_part::subsassignnumelmismatch::subsassignnumelmismatch()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `ucnv_fromUChars_49' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `ucnv_getNextUChar_49' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `ut_ghash_query' make[1]: Leaving directory `/home/shome/temp_codes/matlab_cpp_interface_codes/matlab_sort_using_lib/build' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `fl::i18n::to_ustring(char const*)' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::legacy_two_part::badopt::badopt()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `utLogWarning(utWarningManagerContext*, std::string const&, std::basic_string<char16_t, std::char_traits<char16_t>, std::allocator<char16_t> > const&, __va_list_tag*, std::basic_string<char16_t, std::char_traits<char16_t>, std::allocator<char16_t> > const&, bool)' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `typeinfo for fl::except::IUserException' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MathWorks::I18N::FromUTF16Converter::FromUTF16Converter(char16_t const*, int, char const*)' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `fl::filesystem::get_install_path()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::legacy_two_part::nocomplex::nocomplex()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::checkDimCommon::nonnegativeSize::nonnegativeSize()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::checkDimCommon::complexSize::complexSize()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::matrix::accessBadTypeIndices::accessBadTypeIndices(std::string const&, std::string const&)' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::legacy_two_part::Serialize::Serialize(std::string const&, std::string const&)' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `typeinfo for fl::except::IException' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `utf16_strlen_lim' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `utf16_strcpy' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::colon::logicalInput::logicalInput()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::catenate::opaqueDimensionMismatch::opaqueDimensionMismatch()' //usr/local/MATLAB/R2014a/bin/glnxa64/libeng.so: undefined reference to `utF2cstr' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::matrix::moreSubsAssignDimMismatch::moreSubsAssignDimMismatch()' //usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so: undefined reference to `MATLAB::Cell2Str
  3 件のコメント
shome
shome 2015 年 11 月 19 日
new to matlab forums. getting used to it. accepted the right answer for previous question thanx
Titus Edelhofer
Titus Edelhofer 2015 年 11 月 19 日
No problem. I've formatted the question so that it's easier to read.

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeStartup and Shutdown についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by