Ошибка в Clang Linker - Имя Удаление проблемы

Думаю, это вопрос личного мнения. Также учтите, что в Интернете есть сотни сообщений, информирующих о различиях между дистрибутивами. http: // lifehacker. com / 5889950 / how-to-find-the-perfect-linux-distribution-for-you

В любом случае, я согласен со ссылкой, я тоже новичок и использую Linux Mint.

-5
01.11.2018, 12:21
2 ответа

Это происходит потому, что вы пытаетесь выполнить целое число как функцию. int socket = 5;имеет то же имя, что и функция socket()Этого можно добиться более простым способом:

$ cat main.c
int main = 9;
$ clang -Wall main.c
$./a.out
Segmentation fault

Обновление :, как упомянул в комментарии @Kusalananda, происходит не только на clang.

2
28.01.2020, 05:20

Линкер преобразует символ socketв вашу целочисленную переменную. Затем код «вызывает» его, что приводит к сбою. Это не ошибка.

Работает с компилятором Microsoft из-за специальной схемы искажения, используемой для декорирования всех экспортируемых символов. В этой схеме функции C и глобальные переменные оформлены по-разному(?socket@@YAHHHH@Zи ?socket@@3HA), что приводит к разным именам символов. В *nix-системах никакое изменение не используется для простых функций C и глобальных переменных.

2
28.01.2020, 05:20

Теги

Похожие вопросы