Problem with including cstdlib library (No such file or directory)
-
I've got problem with stdlib.h library in Qt Creator(QT version 5.12.8) on Linux(Ubuntu 20.04). I use some library for interval arithmetic(interval.h), which use quite a bunch of other libraries (as boost/lexical_cast.hpp and mpfr.h) therefore it take some to make it work... or at least it seems so.
I fixed problem with this additional libraries I had to install by adding apropriate entry in my .pro file ("/usr/local/boost/boost_1_55_0" and "/usr/include" in INCLUDEPATH and corresponding entries in LIBS).
But then I get the error "stdlib.h: No such file or directory", I tried to change "#include <stdlib.h>" into "#include <cstdlib>" (similar as I previously have to do with floats.h, so I thought it'll help) but it didn't change it. I still get the same error (and QT creator point to cstlib library itself since that).
I've read here about deleting "/usr/include" from INCLUDEPATH, but this would undo my fix for mpfr(I needed it to eliminate compilation error connected to mpfr's function), so it's not an option.
There is any other way to solve that?
(Here is my entire project if that would help) -
Hi and welcome to devnet,
Why not install the boost development packages from your distribution ?
Your LIBS line is wrong, it should point to the path where the libraries can be found.
I do not know whether you are using only header only stuff from boost but you are not linking to any of its libraries ?
That said, which development packages did you install on your system ?
-
@SGaist what do You mean by installing packages from my distribution?
I Installed both boost libraries and mpfr according to that guide. I use mpfr.h, which as far as I know isn't header only (or it seems so to me as I have to pre compile it, but maybe I get something wrong about this, I'm not a big expert in regard of how compilers work on the inside; but this one isn't from boost) and header only library "lexical_cast.hpp" from boost. Both in interval.h library.
called lexical_cast.hpp. And as I checked in my filesystem "/usr/local" is where the mpfr.h file is located, and "/usr/local/boost/boost_1_55_0" is where "lexical_cast.hpp"(or more precisely "where boost/lexical_cast.hpp") is located. So how my LIBS line is wrong? As I found out when checking how to linking libraries in Qt on Linux the way to do it is adding -L"[location of the library]" in to the LIBS variable... if that isn't the correct way then what is the correct way?Also - the error I was getting was not (at least visibly) connected to boost libraries, but it was about stdlib.h in cstdlib.
-
@Lyokoheros said in Problem with including cstdlib library (No such file or directory):
what do You mean by installing packages from my distribution?
apt install libboost-all-dev
-
@Lyokoheros said in Problem with including cstdlib library (No such file or directory):
stdlib.h
Where do you have that file exactly on your system ?
-
Can you share your .pro file ?
-
@SGaist I already do it. .pro file is inside the repository i linked at the very beginning.
QT += core gui widgets TARGET = BairstowSolver TEMPLATE = app CONFIG += \ no_keywords SOURCES += \ main.cpp \ mywidget.cpp \ solver.cpp \ solverinterval.cpp HEADERS += \ interval.h \ mywidget.h \ solver.h \ solverinterval.h LIBS +=\ -L"/usr/local/boost/boost_1_55_0" \ -L"/usr/include" INCLUDEPATH +=\ /usr/local/boost/boost_1_55_0 \ /usr/include
And here's direct link to it.
-
@Lyokoheros said in Problem with including cstdlib library (No such file or directory):
LIBS +=
-L"/usr/local/boost/boost_1_55_0"
-L"/usr/include"Why did you add /usr/include to search path for libraries?! Also, it is not needed to add it to include paths (INCLUDEPATH) as it is searched by default.
-
mpfr.h is a header which are usually found in an include subdir.
"-L" is used to add paths to search for the linker to find additional libraries. Adding include path to it is usually wrong because if there are library files in there, then your system has an installation issue.
Can you build a default project using that header ?
-
@SGaist well it was exaclty in that folder, not in any of subfolders.
But well actually when I create new qt widget application it could be easily build with just -L"/usr/include" or just reffering to mpfr.h (simply by including it in class header) all was fine but when I tried to build it with both (-L"/usr/include" in LIBS and including mpfr.h) i got the same error: stdlib.h no such file or directory.
Well at least that's what I saw at the beginning now when I tried to repeat this tests it seems random... sometimes with both it work well, sometimes without this addition to LIBS, sometimes only with it (and not including mpfr.h), other time it's not working just with addition to LIBS(without including mpfr.h)... i don't get it...But maybe the correct aproach to it would be solving the error, which appear when I don't add "-L"/usr/include"" to LIBS. And this is the said error:
error: main.o: in function `interval_arithmetic::Interval<long double>::IntRead(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/ubuntu/Desktop/MetodaBairstowa/interval.h:264: error: undefined reference to `mpfr_init2' error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:265: undefined reference to `mpfr_set_str' error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:268: undefined reference to `mpfr_get_ld' error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:271: undefined reference to `mpfr_get_d' [and a little bit of similar lines]
-
Where is the .so file of that library located ?
-
@Lyokoheros said in Problem with including cstdlib library (No such file or directory):
so file of what library?
The library which defines the undefined references. I guess libmpfr.so or something like that...
-
@jsulm I find it in usr/lib/x86_64-linux-gnu, but there is also one in home/ubunutu/anaconda3/lib and a few instances with something like ".6" or ".6.0.2" after the ".so" extension (I know linux technically doesn't have extensions, but I don't know how to call it other way)
-
-
@jsulm apparently it wasn't enough.
And actually it turned out I forget implement the interval version of one function, which of course give me some errors after adding -lmpfr to LIBS, but after adding the mentioned implementation I again get just "stdlib.h: No such file or directory" - which point to cstdlib in /usr/include/c++/9/The .pro file is now like this:
QT += core gui widgets TARGET = BairstowSolver TEMPLATE = app CONFIG += \ no_keywords SOURCES += \ main.cpp \ mywidget.cpp \ solver.cpp \ solverinterval.cpp HEADERS += \ interval.h \ mywidget.h \ solver.h \ solverinterval.h LIBS +=\ -L"/usr/local/boost/boost_1_55_0" \ -lmpfr INCLUDEPATH +=\ /usr/local/boost/boost_1_55_0 \ /usr/include
For changes in intervalsolver.cpp you can look here
-
Nothing stands out...
Do you have the same issue if you use a default project ?