2017-01-19 2 views
1

Ich versuche, Funktionen aus meiner C++ - Standardbibliothek nach ihrem verkrüppelten Namen zu finden. Ich bin auf macOS, so die nm Befehl kann ich inspizieren einen dylib:Wo ist std :: endl in meiner kompilierten Standardbibliothek?

nm -g /usr/local/lib/libc++.dylib 
nm -g /usr/local/lib/libc++abi.dylib 

In der Ausgabe ich die entstellten Namen für std::cout finden:

0000000000079ec0 S __ZNSt3__14coutE 
0000000000079f60 S __ZNSt3__15wcoutE 
etc... 

Allerdings finde ich nicht Einträge für std::endl.

Interessanter auch nicht std::endl, meine LLVM IR-Interpreter finden, obwohl std::cout gut funktioniert:

LLVM ERROR: Program used external function  
'__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_' which could not be resolved! 

Wo soll ich std::endl auf meinem System zu erwarten darf

+0

Können Sie versuchen 'std :: flush' zu finden? – Rakete1111

+2

Ich vermute, dass 'std :: endl' nicht verknüpft ist, da es einfach' << '\ n' << std :: flush' ist. – YSC

+0

'std :: flush' scheint zu sein:' 0000000000011bb0 T __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv' – sdgfsdh

Antwort

2

Wie YSC erwähnt, ist std::endl eine Funktion (die wahrscheinlich inline ist), und alles, was es tut, ist die Ausgabe der Endzeile \n Zeichen, dann rufen Sie flush.

http://en.cppreference.com/w/cpp/io/manip/endl

Sieht aus wie libcxx Endl versteckt hat: https://github.com/llvm-mirror/libcxx/blob/master/include/ostream#L999

Während Flush ein nicht so Attribut hat: https://github.com/llvm-mirror/libcxx/blob/master/include/ostream#L938

+1

Uhm ... es ist [klar] (http://en.cppreference.com/w/cpp/io/manip/endl) eine Vorlage, das ist also der Grund, warum es nicht in den C++ - Standard kompiliert wird Bibliothek. Ob es inline wird oder nicht, ist eine ganz andere Sache. – IInspectable

+0

[std :: flush] (http://en.cppreference.com/w/cpp/io/manip/flush) ist auch eine Vorlage – crezefire

+0

Also? Das OP hat nie angegeben, dass 'std :: flush' aus der C++ Standard Library exportiert werden würde. Ich verstehe den Punkt nicht, den Sie versuchen zu machen. – IInspectable

Verwandte Themen