2013-05-27 3 views
8

Я установил clang 3.2 на свой компьютер Ubuntu 13.04 и скомпилировал и создал libC++, и все на месте. Однако, когда я пытаюсь связать мой (очень простой) код, компоновщик сообщает, что ссылки на std :: cout и т. Д. Не определены.clang ++ 3.2 компоновщик не находит C++ stdlib

Если бы кто-нибудь мог посоветовать мне, что я мог бы сделать, чтобы решить эту проблему, я был бы очень благодарен - я пробовал все, что мог придумать.

Команды и выход здесь:

$ clang++ -v -stdlib=libc++ -lpthread -ldl sqlite3/sqlite3.o src/world.o -o bin/world 

Ubuntu clang version 3.2-1~exp9ubuntu1 (tags/RELEASE_32/final) (based on LLVM 3.2) 

Target: x86_64-pc-linux-gnu 

Thread model: posix 

"/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o bin/world /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../.. -L/lib -L/usr/lib -lpthread -ldl sqlite3/sqlite3.o src/world.o -lc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crtn.o 

src/world.o: In function `main': 

/home/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: undefined reference to `std::cout' 

/home/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: 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/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: 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/douglivesey/work/home/cpp/clang/biots/src/world.cpp:17: 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*)' 

src/world.o: In function `__cxx_global_var_init': 

/usr/include/c++/4.7.3/iostream:74: undefined reference to `std::ios_base::Init::Init()' 

/usr/include/c++/4.7.3/iostream:74: undefined reference to `std::ios_base::Init::~Init()' 

clang: error: linker command failed with exit code 1 (use -v to see invocation) 

make: *** [bin/world] Error 1 

ответ

4

Ошибки показать заголовки и символы из libstdC++ GCC в указывающей world.o был построен с -stdlib=libstdc++ но вы связываете с -stdlib=libc++, несовместимой.

Вам необходимо использовать одинаковые параметры -stdlib.

+0

Интересные, приветствия. Команда для компиляции world.o использует ее правильно: 'clang ++ -v -stdlib = libC++ -lpthread -ldl sqlite3/sqlite3.o src/world.o -o bin/world' Однако файл sqlite3.o что он связан с компиляцией с помощью clang -c -o sqlite3/sqlite3.o sqlite3/sqlite3.c', потому что это файл C. Может ли это быть связано с проблемой? – biot023

+0

+1 потому что он также решает мою проблему. Но как вы (или кто-либо) можете сообщить из сообщений об ошибках, что компиляция и привязка выполнялись с использованием разных заголовков/библиотек? – Arbalest

+1

@Arbalest, потому что я знаю, что '/ usr/include/C++/4.7.3/iostream' - это путь для заголовка, который поставляется с libstdC++ из GCC 4.7.3, и если код содержит ссылку на что-то определенное в libstdC++, то он должен быть скомпилирован с использованием libstdC++, но команда компоновщика показывает '-std = libC++'. –

Смежные вопросы