Clang 3.8 make file failed

After scratching my head for more than 3 hours, I finally gave up and decided to ask you guys for help.

I have several files that are going to compile into one executable file.

With -stdlib=libc++ flag I will get

 /usr/include/c++/v1/string:1938:44: error: 'basic_string<_CharT, _Traits, _Allocator>' is missing exception specification 'noexcept(is_nothrow_copy_constructible<allocator_type>::value)' basic_string<_CharT, _Traits, _Allocator>::basic_string(const allocator_type& __a) ^ /usr/include/c++/v1/string:1326:40: note: previous declaration is here _LIBCPP_INLINE_VISIBILITY explicit basic_string(const allocator_type& __a) 

I did a few searches and as another question. changed to -stdlib=libstdc++ , I get whole batches of output in the console.

 /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:382: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:382: undefined reference to `std::allocator<char>::~allocator()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:382: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:382: undefined reference to `std::allocator<char>::~allocator()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::allocator<char>::allocator()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::allocator<char>::~allocator()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:399: undefined reference to `std::allocator<char>::~allocator()' png.o: In function `__cxx_global_var_init': /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/iostream:74: undefined reference to `std::ios_base::Init::Init()' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/iostream:74: undefined reference to `std::ios_base::Init::~Init()' png.o: In function `epng_err(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:18: undefined reference to `std::cerr' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:19: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:19: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:19: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' /home/bobby/Documents/freshmen/225/cs225/lab_intro/png.cpp:19: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))' png.o: In function `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1158: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1159: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1159: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1160: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*, unsigned long)' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1161: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1163: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/basic_string.tcc:1163: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' clang: error: linker command failed with exit code 1 (use -v to see invocation) 

This is only the last piece of information that has been crossed out.

Make file here

 EXENAME = lab_intro OBJS = main.o png.o rgbapixel.o CXX = clang++ CXXFLAGS = -std=c++1y -stdlib=libstdc++ -c -g -O0 -Wall -Wextra -pedantic LD = clang++ LDFLAGS = -std=c++1y -stdlib=libc++ -lpng -lc++abi -lpthread all : $(EXENAME) $(EXENAME) : $(OBJS) $(LD) $(OBJS) $(LDFLAGS) -o $(EXENAME) main.o : main.cpp png.h rgbapixel.h $(CXX) $(CXXFLAGS) main.cpp png.o : png.cpp png.h rgbapixel.h $(CXX) $(CXXFLAGS) png.cpp rgbapixel.o : rgbapixel.cpp rgbapixel.h $(CXX) $(CXXFLAGS) rgbapixel.cpp clean : -rm -f *.o $(EXENAME) 

The operating system is Ubuntu 16.04LTS, with all the necessary dependencies installed (or, I think, I installed it correctly).

tree files

 lab_intro/ Makefile main.cpp png.cpp png.h rgbapixel.h rgbapixel.cpp sample.png 
+5
source share
1 answer

You need to add one of the following pairs to the assembly line:

  • -L / usr / lib -lstdC ++

  • -L / usr / lib -llibC ++

+4
source

Source: https://habr.com/ru/post/1262999/


All Articles