Monday, May 21, 2007

ld: unrecognized option '--hash-style=both'

gcc -Wl,-Map=contiki.map,-export-dynamic testv6.co obj_linux-native/socketdev_listener.o \
contiki-linux-native.a -o testv6.linux-native
/usr/local/bin/ld: unrecognized option '--hash-style=both'
/usr/local/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status


If you look closely, the error is something related to the local gcc not using the host's linker (ld).

$ which gcc
/usr/bin/gcc


$ which ld
/usr/local/bin/ld


For some reason, I messed my compiler path. To synchronized gcc to use the host's dynamic linker (i.e. /usr/bin/ld), set the environment variable COMPILER_PATH to /usr/bin.

$ export COMPILER_PATH=/usr/bin
$ echo $COMPILER_PATH
/usr/bin

$ gcc -print-prog-name=ld
/usr/bin/ld

9 comments:

Anonymous said...

it worked for me
Thanks

Anonymous said...

Thanks. It worked, but I have to do it every time I open a new terminal. Otherwise, the old error just kicks in. Is there a way to fix that?

Prem said...

Just do the assignment of COMPILER_PATH in your bash profile or system-wide /etc/profile

Anonymous said...

Thank you. I did what you said. After that, whenever I enter the command $gcc -print-prog-name=ld, the output become "ld" instead of "/usr/bin/ld", and I still get the same error message when I use the GCC compiler.

I'm running a Linux Redhat 2.6.

Prem said...

What is the output of `echo $COMPILER_PATH`?

Anonymous said...

The output is /usr/bin.

Anonymous said...

Also, I just found two problems with my system.

First, my error message is actually different from yours:

/usr/local/bin/ld: unrecognized option '--hash-style=gnu'
/usr/local/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status

Second, changing bashrc or profile in my computer doesn't seem to have any effect at all. I appended a new directory to PATH. The echo output shows the correct PATH (the changed one), but when I'm executing a command, bash will not search the appended directory.

Anonymous said...

Also, I just found two problems with my system.

First, my error message is actually different from yours:

/usr/local/bin/ld: unrecognized option '--hash-style=gnu'
/usr/local/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status

Second, changing bashrc or profile in my computer doesn't seem to have any effect at all. I appended a new directory to PATH. The echo output shows the correct PATH (the changed one), but when I'm executing a command, bash will not search the appended directory.

Anonymous said...

Sorry my bad. Changing path works.

But the first problem still exists.