2017-01-18 6 views
5

Nachdem ich mich 3 Stunden am Kopf kratzt habe, habe ich endlich aufgegeben und beschlossen, euch um Hilfe zu bitten.clang 3.8 make file scheitert

Ich habe ein paar Dateien, die in eine ausführbare Datei kompiliert werden.

Mit dem -stdlib=libc++ flag, werde ich bekommen

/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) 

Ich habe einige Suche und als eine andere Frage SO susggests. geändert zu -stdlib=libstdc++, bekomme ich eine ganze Menge in der Konsole ausgegeben.

/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) 

Dies ist nur der letzte Teil der Informationen ausgespuckt.

Make-Datei ist hier

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) 

Betriebssystem ist Ubuntu 16.04LTS, mit allen notwendigen Abhängigkeiten installiert (Oder ich denke, dass ich richtig installiert ist).

FileTree

lab_intro/ 
    Makefile 
    main.cpp 
    png.cpp 
    png.h 
    rgbapixel.h 
    rgbapixel.cpp 
    sample.png 
+3

Sie kompilieren mit ' libstdC++ 'aber link mit' libC++ ', bist du dir da sicher? –

+0

@Someprogrammerdude Du bist ein Genie !!!!!!! ICH BIN SO DUMM. Post eine Antwort, ich werde das akzeptieren. – Bobby

Antwort

4

Sie müssen Ihre Build Linie eine der folgenden Paare hinzuzufügen:

  • -L/usr/lib -lstdC++

  • -L/usr/lib -llibC++

Verwandte Themen