I get fatal error: stdlib.h: No such file or directory when compiling:
PROTOC src/caffe/proto/caffe.proto
CXX src/caffe/solver.cpp
CXX src/caffe/data_transformer.cpp
CXX src/caffe/data_reader.cpp
CXX src/caffe/blob.cpp
CXX src/caffe/util/sampler.cpp
CXX src/caffe/util/math_functions.cpp
CXX src/caffe/util/io.cpp
In file included from /usr/include/boost/config/platform/linux.hpp:15:0,
from /usr/include/boost/config.hpp:57,
from /usr/include/boost/thread/detail/platform.hpp:14,
from /usr/include/boost/thread/thread_only.hpp:12,
from /usr/include/boost/thread/thread.hpp:12,
from /usr/include/boost/thread.hpp:13,
from src/caffe/data_reader.cpp:1:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
In file included from /usr/include/c++/6.2.1/bits/stl_algo.h:59:0,
from /usr/include/c++/6.2.1/algorithm:62,
from src/caffe/util/sampler.cpp:1:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/util/sampler.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [Makefile:576: .build_release/src/caffe/data_reader.o] Error 1
In file included from /usr/include/c++/6.2.1/bits/stl_algo.h:59:0,
from /usr/include/c++/6.2.1/algorithm:62,
from /usr/include/opencv2/core/base.hpp:53,
from /usr/include/opencv2/core.hpp:54,
from /usr/include/opencv2/core/core.hpp:48,
from src/caffe/data_transformer.cpp:2:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/data_transformer.o] Error 1
In file included from /usr/include/c++/6.2.1/bits/stl_algo.h:59:0,
from /usr/include/c++/6.2.1/algorithm:62,
from ./include/caffe/blob.hpp:4,
from src/caffe/blob.cpp:4:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/blob.o] Error 1
In file included from /usr/include/boost/config/platform/linux.hpp:15:0,
from /usr/include/boost/config.hpp:57,
from /usr/include/boost/math/special_functions/detail/round_fwd.hpp:11,
from /usr/include/boost/math/special_functions/math_fwd.hpp:26,
from /usr/include/boost/math/special_functions/next.hpp:13,
from src/caffe/util/math_functions.cpp:1:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/util/math_functions.o] Error 1
In file included from /usr/include/c++/6.2.1/ext/string_conversions.h:41:0,
from /usr/include/c++/6.2.1/bits/basic_string.h:5402,
from /usr/include/c++/6.2.1/string:52,
from /usr/include/c++/6.2.1/stdexcept:39,
from /usr/include/c++/6.2.1/array:39,
from /usr/include/c++/6.2.1/tuple:39,
from /usr/include/c++/6.2.1/bits/stl_map.h:63,
from /usr/include/c++/6.2.1/map:61,
from src/caffe/solver.cpp:3:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/solver.o] Error 1
In file included from /usr/include/c++/6.2.1/bits/stl_algo.h:59:0,
from /usr/include/c++/6.2.1/algorithm:62,
from /usr/include/boost/algorithm/string/classification.hpp:14,
from src/caffe/util/io.cpp:1:
/usr/include/c++/6.2.1/cstdlib:75:25: fatal error: stdlib.h: No such file or directory
#include_next <stdlib.h>
^
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/util/io.o] Error 1
Environment:
I have no issues compiling the master caffe branch.
Why don't you try to compile by gcc version 5 ?
Now I get another error:
CXX/LD -o .build_release/tools/net_speed_benchmark.bin
.build_release/tools/create_label_map.o: In function `main':
create_label_map.cpp:(.text.startup+0x204): undefined reference to `caffe::LabelMap::LabelMap()'
create_label_map.cpp:(.text.startup+0x216): undefined reference to `caffe::ReadLabelFileToLabelMap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, caffe::LabelMap*)'
create_label_map.cpp:(.text.startup+0x22e): undefined reference to `caffe::LabelMap::~LabelMap()'
create_label_map.cpp:(.text.startup+0x2e0): undefined reference to `caffe::LabelMap::~LabelMap()'
collect2: error: ld returned 1 exit status
make: *** [Makefile:620: .build_release/tools/create_label_map.bin] Error 1
make: *** Waiting for unfinished jobs....
.build_release/tools/convert_annoset.o: In function `main':
convert_annoset.cpp:(.text.startup+0xbef): undefined reference to `caffe::AnnotatedDatum::AnnotatedDatum()'
convert_annoset.cpp:(.text.startup+0x1478): undefined reference to `caffe::LabelMap::LabelMap()'
convert_annoset.cpp:(.text.startup+0x14a1): undefined reference to `caffe::MapNameToLabel(caffe::LabelMap const&, bool, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >*)'
convert_annoset.cpp:(.text.startup+0x187e): undefined reference to `caffe::ReadImageToDatum(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, int, int, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, caffe::Datum*)'
convert_annoset.cpp:(.text.startup+0x1a22): undefined reference to `caffe::LabelMap::~LabelMap()'
convert_annoset.cpp:(.text.startup+0x1b1d): undefined reference to `caffe::AnnotatedDatum::~AnnotatedDatum()'
convert_annoset.cpp:(.text.startup+0x1df0): undefined reference to `caffe::ReadRichImageToAnnotatedDatum(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, int, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, caffe::AnnotatedDatum_AnnotationType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > > const&, caffe::AnnotatedDatum*)'
convert_annoset.cpp:(.text.startup+0x2141): undefined reference to `caffe::AnnotatedDatum::~AnnotatedDatum()'
convert_annoset.cpp:(.text.startup+0x226a): undefined reference to `caffe::LabelMap::~LabelMap()'
collect2: error: ld returned 1 exit status
make: *** [Makefile:619: .build_release/tools/convert_annoset.bin] Error 1
.build_release/tools/get_image_size.o: In function `main':
get_image_size.cpp:(.text.startup+0x6ca): undefined reference to `caffe::GetImageSize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int*, int*)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:619: .build_release/tools/get_image_size.bin] Error 1
Probably because other dependencies are built with gcc 6. Looking at similar issues in the caffe repo, they suggest to use cmake, but it gives errors as well
In the file Makefile.config, add /usr/include/c++/7 and /usr/include /usr/local/include for INCLUDE_DIRS so that the compiler can find the file stdlib.h, and notice that 7 in first path represents the main version of g++.
I face a similar issue, but I'm not able to compile with any C++/GNU version (I tried 6/7/8/9) because it every time says it can't find stdlib.h even though the file is definitely there:
XX src/caffe/syncedmem.cpp
In file included from /usr/include/boost/config/platform/linux.hpp:15,
from /usr/include/boost/config.hpp:57,
from /usr/include/boost/smart_ptr/shared_ptr.hpp:17,
from /usr/include/boost/shared_ptr.hpp:17,
from ./include/caffe/common.hpp:4,
from src/caffe/syncedmem.cpp:1:
/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
75 | #include_next <stdlib.h>
| ^~~~~~~~~~
compilation terminated.
make: *** [Makefile:576: .build_release/src/caffe/syncedmem.o] Error 1
make: *** Waiting for unfinished jobs....
I tried solution by @gaoshoufenmu but didn't work. How did you solve this?
Ok , I managed to solve it. The solution by @gaoshoufenmu doesn't work and makes it even worse. You simply have to delete usr/include from your INCLUDE_DIRS in Makefile.config.
The simple reason for this is that C++ will search for global headers (the ones enclosed in < >) outside of the INCLUDE_DIRS, and only there. This means that you have to remove all paths that may contain global headers.