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

JUnit – Run unit test in an Sequence / Order

In JUnit, we can use @FixMethodOrder(MethodSorters.xxx) to run the test methods in a sequence or order.

import org.junit.FixMethodOrder;import org.junit.Test;import org.junit.runners.MethodSorters;importstatic org.hamcrest.CoreMatchers.is;importstatic org.junit.Assert.assertThat;//Sorts by method name@FixMethodOrder(MethodSorters.NAME_ASCENDING)publicclassExecutionOrderTest{@TestpublicvoidtestB(){assertThat(1+1,is(2));}@Testpublicvoidtest1(){assertThat(1+1,is(2));}@TestpublicvoidtestA

Create Runnable Jar - Eclipse Options

When exporting to a Runnable Jar, there are three options in eclipse Helios. Extract required libraries into JARPackage required libraries into JARCopy required libraries into sub folder next to JAR. What are differences : Extract required libraries into JAR - Extracts the actual .class files from the libraries your app uses and puts those .class files inside the runnable JAR. So, the runnable JAR will not only contain the .class files of your application, but also the .class files of all the libraries your application uses. Package required libraries into JAR - Puts the actual JAR files of the libraries into your runnable JAR. Normally, a JAR file within a JAR file cannot be loaded by the JVM. But Eclipse adds special classes to the runnable JAR to make this possible. Copy required libraries into sub folder next to JAR - Keeps the library JARs completely separate from the runnable JAR, so the runnable JAR will only contain the .class files of your application. Option #2 is convenient be…