Подтвердить что ты не робот

Разница между -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.

Спасибо.

4b9b3361

Ответ 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 используется для указания, что список опций, разделенных запятыми, должен быть передан компоновщику для дальнейшей обработки.