2015-07-14 21 views
6

Clang ++ ile garip bir linker problemi ile karşı karşıyayım - std :: string sınıfı tanımını bulmak mümkün ancak std :: ios_base :: failure class. Bazı standart kütüphane sınıfları için clang ++ ile Linker hatası

$ cat foo.cpp 
#include <string> 
#include <iostream> 

int main() 
{ 
    std::string msg = "hello world"; 
    std::ios_base::failure f(msg); 
    std::cout << msg << std::endl; 
    return 0; 
} 

$ clang++ foo.cpp 
/tmp/foo-b77625.o: In function `main': 
foo.cpp:(.text+0x4d): undefined reference to `std::ios_base::failure::failure(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' 
clang-3.7: error: linker command failed with exit code 1 (use -v to see invocation) 

$ clang++ --version 
clang version 3.7.0 (trunk 239466) 
Target: x86_64-unknown-linux-gnu 
Thread model: posix 

fark ettim ben std :: ios_base örneğinin :: yetmezliği, doğru programı bağlantıları (ve yürütür) yorum yaparsanız.

$ clang++ foo.cpp && ./a.out 
hello world 

Birisi bu davranışı ve nasıl düzeltileceğini anlamama yardımcı olabilir mi?

P.S. Aynı davranışı clang versiyonu 3.6.0 ile de gözlemledim.

cevap

-1

deneyin, size (libC++) clang kendi standart kitaplığı kullanarak niyetliler varsayarsak başlığında <ios>

+0

no ile test edildi. Hayır. Soru, bir derleme sorunu değil, bir bağlayıcı sorununu ifade eder. Öneriniz hiç farketmiyor. –

0

tanımlanır cpprefrence göre sizin yuh

#include <ios> 

başında dahil eklenmesi

$> clang++ foo.cpp -stdlib=libc++ -I/path/to/libcxx-build/include/c++/v1 
: Eğer (hiç libcxx-build yüklenmiş) standart kütüphane dahil-yolunu sağlamak zorunda olacak - o zaman uzakta değildir 10

("-v" anahtarını yukarıdaki gibi ekleyin, eğer ayrıntılı çıktılar istiyorsanız).

P.S. dahil olmak üzere clang-3.7 için başka bir yere gitmezse, yukarıdaki çalışma - clang-3.8

İlgili konular