Skip to main content

undefined reference to `std::basic_string …

In Linux, while trying to compile a C++ program I encountered a very unusual linker error which was even happening in case of a simple “Hello World” program.

For this following piece of code :

#include <iostream>
using namespace std;
int main()
{
cout << “Hello World”;
return 0;
}


When I tried compiling it using following command :
# gcc -o test test.cpp

I got this insane error :

/tmp/ccIan2q6.o(.text+0xd): In function `std::__verify_grouping(char const*, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)’:: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const’/tmp/ccIan2q6.o(.text+0×60): In function `std::__verify_grouping(char const*, unsigned int, std::basic_string<char, std::char_traits<char>,std::allocator<char>> const&)’:: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const’/tmp/ccIan2q6.o(.text+0×9f): In function `std::__verify_grouping(char const*, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)’:: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const’/tmp/ccIan2q6.o(.text+0xce): In function `std:: __verify_grouping (char const*, unsigned int, std::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)’:: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned int) const’/tmp/ccIan2q6.o (.text+0×127): In function `main’:: undefined reference to `std::cout’/tmp/ccIan2q6.o(.text+0×12c): In function `main’:: 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*)’/tmp/ccIan2q6.o(.text+0×155): In function `__static_initialization_and_destruction_0(int, int)’:: undefined reference to `std::ios_base::Init::Init()’/tmp/ccIan2q6.o(.text+0×170): In function `__static_initialization_and_destruction_0 (int, int)’:: undefined reference to `std::ios_base::Init::~Init()’/tmp/ccIan2q6.o(.eh_frame+0×11): undefined reference to`__gxx_personality_v0′ collect2: ld returned 1 exit status

After lot of effort finally I found following solutions for this error :

Solution 1

Compile using following command :
# gcc <source> -lstdc++

Solution 2

Compile using g++ :
# g++ -o test test.cpp

Comments

Popular posts from this blog

Exploring Node.js Internals

I found a great article explaining Node JS internals, must read : https://www.smashingmagazine.com/2020/04/nodejs-internals/ Some other articles : Introduction to Node.js Being an official website, Node.dev explains what Node.js is, as well as its package managers, and lists web frameworks built on top of it. “ JavaScript & Node.js ”,  The Node Beginner Book This book by  Manuel Kiessling  does a fantastic job of explaining Node.js, after warning that JavaScript in the browser is not the same as the one in Node.js, even though both are written in the same language. Beginning Node.js This beginner book goes beyond an explanation of the runtime. It teaches about packages and streams and creating a web server with the Express framework. LibUV This is the official documentation of the supporting C++ code of the Node.js runtime. V8 This is the official documentation of the JavaScript engine that makes it possible to write Node.js with JavaScript.

Hibernate Object Conversations

Session methods to use for object conversations Save() A new instance being attached to the session. An insert will be scheduled. Update() Call Update to make a transient object persistent again. It will force a SQL update on the transient object. This is because Hibernate does not know whether the object is dirty or not and to be safe by default schedules an update. This method will throw an exception, if the entity is already registered with the session. - NonUniqueObjectException is thrown. saveOrUpdate() Either a save or an update will be called based on whether the identifier exists or not. No identifier - save is called, else update is called. Or for a better understanding, if the object is transient, then a save is called, if the object is persistent, then an update is called. Reattaching an unmodified instance - If you know for sure that an object is not modified and you just want to make it persistent again - Session.lock(item, LockMode.No