C++ build error
显示 更早的评论
I have create in QtCreator project with such main file:
int main(int argc, char *argv[])
{
// QCoreApplication a(argc, argv);
Engine *ep;
/*
* Call engOpen with a NULL string. This starts a MATLAB process
* on the current host using the command "matlab".
*/
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
engEvalString(ep, "cd '/home/user/developer/matlab/models");
// engEvalString(ep, "/while true ss = sim('weatherW1', 'StopTime', '30'); end");
engEvalString(ep, "ss = sim('weatherW1', 'StopTime', '30')");
int res = 0;//a.exec();
engClose(ep);
return res;
}
but when I compile code I get errors:
^
g++-4.9 -o testM temps/obj/main.o -L/home/user/bin/MATLAB/R2017a/bin/glnxa64 -lmx -lmex -lmat -lm -leng -lpthread
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwservices.so: undefined reference to `icu_56::UnicodeString::doReplace(int, int, char16_t const*, int, int)'
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `UCNV_FROM_U_CALLBACK_STOP_WITH_INVISIBLE_CHARS_56'
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::doCompare(int, int, char16_t const*, int, int) const'
Makefile:231: recipe for target 'testM' failed
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::UnicodeString(char16_t const*, int)'
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `UCNV_FROM_U_CALLBACK_ESCAPE_WITH_INVISIBLE_CHARS_56'
/home/user/bin/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::UnicodeString(char16_t const*)'
collect2: error: ld returned 1 exit status
make: *** [testM] Error 1
19:03:12: Процес "/usr/bin/make" завершився з кодом 2.
Помилка під час збірки/розгортання проекту runML (комплект: Desktop Qt 5.9.2 GCC 64bit)
Під час виконання кроку "Make"
What I do wrong?
Regards
回答(1 个)
Himanshu
2024-12-10
0 个投票
Hey,
The error you are encountering occurs because both Qt and MATLAB use the ICU library, but different versions, leading to conflicts when linking. To resolve this, you need to modify the LD_LIBRARY_PATH in your QtCreator project settings to prioritize the MATLAB library path by adding /home/user/bin/MATLAB/R2017a/bin/glnxa64 at the beginning.
You can do thisby follwing these steps:
- Open your project in QtCreator.
- Go to the project settings (usually accessible via the "Projects" button in the sidebar).
- Under the "Build & Run" tab, find the "Build Environment" section.
- Modify the LD_LIBRARY_PATH by prepending the MATLAB library path: /home/user/bin/MATLAB/R2017a/bin/glnxa64.
- Ensure this change is saved and then rebuild your project.
By ensuring the MATLAB library path is prioritized, the linker will use the correct ICU library version that MATLAB expects, resolving the undefined reference errors.
Hope this hels!
类别
在 帮助中心 和 File Exchange 中查找有关 Call MATLAB from C 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!