c++ccompiler-errorsstandard-librarystd

stdlib.h and cstdlib Errors When Building VBA-M


I'm trying to build VBA-M with GCC on Fedora 24, but I get this error:

[ 69%] Building CXX object CMakeFiles/vbam.dir/src/sdl/expr.cpp.o
In file included from /usr/include/c++/6.1.1/stdlib.h:36:0,
                 from expr.ypp:5:
/usr/include/c++/6.1.1/cstdlib:124:11: error: ‘::div_t’ has not been declared
   using ::div_t;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:125:11: error: ‘::ldiv_t’ has not been declared
   using ::ldiv_t;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:127:11: error: ‘::abort’ has not been declared
   using ::abort;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:128:11: error: ‘::abs’ has not been declared
   using ::abs;
           ^~~
/usr/include/c++/6.1.1/cstdlib:129:11: error: ‘::atexit’ has not been declared
   using ::atexit;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:132:11: error: ‘::at_quick_exit’ has not been declared
   using ::at_quick_exit;
           ^~~~~~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:135:11: error: ‘::atof’ has not been declared
   using ::atof;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:136:11: error: ‘::atoi’ has not been declared
   using ::atoi;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:137:11: error: ‘::atol’ has not been declared
   using ::atol;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:138:11: error: ‘::bsearch’ has not been declared
   using ::bsearch;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:139:11: error: ‘::calloc’ has not been declared
   using ::calloc;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:140:11: error: ‘::div’ has not been declared
   using ::div;
           ^~~
/usr/include/c++/6.1.1/cstdlib:141:11: error: ‘::exit’ has not been declared
   using ::exit;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:142:11: error: ‘::free’ has not been declared
   using ::free;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:143:11: error: ‘::getenv’ has not been declared
   using ::getenv;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:144:11: error: ‘::labs’ has not been declared
   using ::labs;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:145:11: error: ‘::ldiv’ has not been declared
   using ::ldiv;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:146:11: error: ‘::malloc’ has not been declared
   using ::malloc;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:148:11: error: ‘::mblen’ has not been declared
   using ::mblen;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:149:11: error: ‘::mbstowcs’ has not been declared
   using ::mbstowcs;
           ^~~~~~~~
/usr/include/c++/6.1.1/cstdlib:150:11: error: ‘::mbtowc’ has not been declared
   using ::mbtowc;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:152:11: error: ‘::qsort’ has not been declared
   using ::qsort;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:155:11: error: ‘::quick_exit’ has not been declared
   using ::quick_exit;
           ^~~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:158:11: error: ‘::rand’ has not been declared
   using ::rand;
           ^~~~
/usr/include/c++/6.1.1/cstdlib:159:11: error: ‘::realloc’ has not been declared
   using ::realloc;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:160:11: error: ‘::srand’ has not been declared
   using ::srand;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:161:11: error: ‘::strtod’ has not been declared
   using ::strtod;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:162:11: error: ‘::strtol’ has not been declared
   using ::strtol;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:163:11: error: ‘::strtoul’ has not been declared
   using ::strtoul;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:164:11: error: ‘::system’ has not been declared
   using ::system;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:166:11: error: ‘::wcstombs’ has not been declared
   using ::wcstombs;
           ^~~~~~~~
/usr/include/c++/6.1.1/cstdlib:167:11: error: ‘::wctomb’ has not been declared
   using ::wctomb;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:220:11: error: ‘::lldiv_t’ has not been declared
   using ::lldiv_t;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:226:11: error: ‘::_Exit’ has not been declared
   using ::_Exit;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:230:11: error: ‘::llabs’ has not been declared
   using ::llabs;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:236:11: error: ‘::lldiv’ has not been declared
   using ::lldiv;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:247:11: error: ‘::atoll’ has not been declared
   using ::atoll;
           ^~~~~
/usr/include/c++/6.1.1/cstdlib:248:11: error: ‘::strtoll’ has not been declared
   using ::strtoll;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:249:11: error: ‘::strtoull’ has not been declared
   using ::strtoull;
           ^~~~~~~~
/usr/include/c++/6.1.1/cstdlib:251:11: error: ‘::strtof’ has not been declared
   using ::strtof;
           ^~~~~~
/usr/include/c++/6.1.1/cstdlib:252:11: error: ‘::strtold’ has not been declared
   using ::strtold;
           ^~~~~~~
/usr/include/c++/6.1.1/cstdlib:260:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::lldiv_t;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:262:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::_Exit;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:264:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::llabs;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:265:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::div;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:266:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::lldiv;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:268:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::atoll;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:269:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::strtof;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:270:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::strtoll;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:271:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::strtoull;
           ^~~~~~~~~
/usr/include/c++/6.1.1/cstdlib:272:11: error: ‘::__gnu_cxx’ has not been declared
   using ::__gnu_cxx::strtold;
           ^~~~~~~~~
In file included from expr.ypp:5:0:
/usr/include/c++/6.1.1/stdlib.h:38:12: error: ‘std::std::abort’ has not been declared
 using std::abort;
            ^~~~~
/usr/include/c++/6.1.1/stdlib.h:39:12: error: ‘std::std::atexit’ has not been declared
 using std::atexit;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:40:12: error: ‘std::std::exit’ has not been declared
 using std::exit;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:43:14: error: ‘std::std::at_quick_exit’ has not been declared
   using std::at_quick_exit;
              ^~~~~~~~~~~~~
/usr/include/c++/6.1.1/stdlib.h:46:14: error: ‘std::std::quick_exit’ has not been declared
   using std::quick_exit;
              ^~~~~~~~~~
/usr/include/c++/6.1.1/stdlib.h:51:12: error: ‘std::std::div_t’ has not been declared
 using std::div_t;
            ^~~~~
/usr/include/c++/6.1.1/stdlib.h:52:12: error: ‘std::std::ldiv_t’ has not been declared
 using std::ldiv_t;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:55:12: error: ‘std::std::atof’ has not been declared
 using std::atof;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:56:12: error: ‘std::std::atoi’ has not been declared
 using std::atoi;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:57:12: error: ‘std::std::atol’ has not been declared
 using std::atol;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:58:12: error: ‘std::std::bsearch’ has not been declared
 using std::bsearch;
            ^~~~~~~
/usr/include/c++/6.1.1/stdlib.h:59:12: error: ‘std::std::calloc’ has not been declared
 using std::calloc;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:61:12: error: ‘std::std::free’ has not been declared
 using std::free;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:62:12: error: ‘std::std::getenv’ has not been declared
 using std::getenv;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:63:12: error: ‘std::std::labs’ has not been declared
 using std::labs;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:64:12: error: ‘std::std::ldiv’ has not been declared
 using std::ldiv;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:65:12: error: ‘std::std::malloc’ has not been declared
 using std::malloc;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:67:12: error: ‘std::std::mblen’ has not been declared
 using std::mblen;
            ^~~~~
/usr/include/c++/6.1.1/stdlib.h:68:12: error: ‘std::std::mbstowcs’ has not been declared
 using std::mbstowcs;
            ^~~~~~~~
/usr/include/c++/6.1.1/stdlib.h:69:12: error: ‘std::std::mbtowc’ has not been declared
 using std::mbtowc;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:71:12: error: ‘std::std::qsort’ has not been declared
 using std::qsort;
            ^~~~~
/usr/include/c++/6.1.1/stdlib.h:72:12: error: ‘std::std::rand’ has not been declared
 using std::rand;
            ^~~~
/usr/include/c++/6.1.1/stdlib.h:73:12: error: ‘std::std::realloc’ has not been declared
 using std::realloc;
            ^~~~~~~
/usr/include/c++/6.1.1/stdlib.h:74:12: error: ‘std::std::srand’ has not been declared
 using std::srand;
            ^~~~~
/usr/include/c++/6.1.1/stdlib.h:75:12: error: ‘std::std::strtod’ has not been declared
 using std::strtod;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:76:12: error: ‘std::std::strtol’ has not been declared
 using std::strtol;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:77:12: error: ‘std::std::strtoul’ has not been declared
 using std::strtoul;
            ^~~~~~~
/usr/include/c++/6.1.1/stdlib.h:78:12: error: ‘std::std::system’ has not been declared
 using std::system;
            ^~~~~~
/usr/include/c++/6.1.1/stdlib.h:80:12: error: ‘std::std::wcstombs’ has not been declared
 using std::wcstombs;
            ^~~~~~~~
/usr/include/c++/6.1.1/stdlib.h:81:12: error: ‘std::std::wctomb’ has not been declared
 using std::wctomb;

I've tried export CXX=clang++; export CC=clang, but that gives me different errors.

Is the error in the code I'm compiling, or is it in the standard library? Is there a package I need to install, or any way to fix this? Should I just edit the include file directly?


Solution

  • I had the same issue when building on Arch Linux. The issue is that the expr.cpp file is including things inside a namespace. If you look at both expr.ypp and expr.cpp you'll see something like this:

    namespace std {
    #include <memory.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    }
    

    The problem is include inside a namespace. I changed to this and it works now:

    #include <memory.h>
    #include <stdio.h>
    #include <cstdlib>
    #include <string.h>
    

    Hope it helps!