#include <iostream>
using namespace std;
int main() {
cout << "Hello\n";
return 0;
}
If I compile the program above on my Ubuntu 18.04 system,
$ g++ hello.cpp -o hello
/usr/bin/ld: cannot find crtbeginS.o: No such file or directory
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
I have gcc 7.4
and ld 2.30
on my system. If I list the search paths on my system:
$ ldconfig -v 2>/dev/null | grep -v ^$'\t'
/usr/lib/x86_64-linux-gnu/libfakeroot:
/lib/i386-linux-gnu:
/usr/lib/i386-linux-gnu:
/usr/local/lib:
/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu:
/lib32:
/usr/lib32:
/libx32:
/usr/libx32:
/lib:
/usr/lib:
/usr/lib/i386-linux-gnu/sse2: (hwcap: 0x0000000000000001)
$ strace g++ hello.cpp -o hello 2>&1 | grep crtbeginS.o
access("/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../x86_64-linux-gnu/lib/x86_64-linux-gnu/7/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../x86_64-linux-gnu/lib/x86_64-linux-gnu/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../x86_64-linux-gnu/lib/../lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/7/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/x86_64-linux-gnu/7/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/x86_64-linux-gnu/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/x86_64-linux-gnu/7/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/x86_64-linux-gnu/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/../lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/../x86_64-linux-gnu/lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/gcc/x86_64-linux-gnu/7/../../../crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/crtbeginS.o", R_OK) = -1 ENOENT (No such file or directory)
wait4(19085, /usr/bin/ld: cannot find crtbeginS.o: No such file or directory
The funny thing is:
$ ll /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o
-rw-r--r-- 1 root root 2.8K May 8 2019 /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o
However, if you notice gcc adds three ../
for free above: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/7/crtbeginS.o
.
I am out of ideas. Can anybody shed any light?