Разница между -shared и -Wl -shared от параметров GCC
Я знаю, что -Wl,-shared
- это опция ld. Я видел, как кто-то компилируется таким образом,
$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
И кто-то вроде этого
$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o
Итак, я хочу знать, есть ли разница между -shared
и -Wl,-shared
.
Спасибо.
Ответы
Ответ 1
Существует разница между передачей -shared
в gcc или -shared
в ld (через -Wl
). Передача -shared
в GCC может включать или отключать другие флаги во время соединения. В частности, могут быть задействованы разные файлы crt*
.
Чтобы получить дополнительную информацию, grep для -shared
в каталоге и подкаталогах GCC gcc/config/
.
Изменить: Чтобы указать конкретный пример: на i386 FreeBSD, gcc -shared
будет ссылаться в объектном файле crtendS.o
, а без -shared
вместо этого он будет ссылаться на crtend.o
. Таким образом, -shared
и -Wl,-shared
не эквивалентны.
Ответ 2
Я не думаю, что есть какая-то разница. -shared
не поддерживается опцией gcc
, и он передается в компоновщик, указываете ли вы его с помощью -Wl
или нет. -Wl
опция gcc используется для указания, что список опций, разделенных запятыми, должен быть передан компоновщику для дальнейшей обработки.