powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ассемблерные вставки в c++. GNU
10 сообщений из 35, страница 2 из 2
Ассемблерные вставки в c++. GNU
    #33208956
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yЭто точно стандарт? Ссылку можно? (Вопрос для меня непринципиальный, поэтому самому искать ответ лень) Может быть это не стандарт, а типа соглашения компиляторов под Вин? Потому как под Линуксом по умолчанию никаких подчеркиваний впереди не добавляется - или там стандарт нарушают?
Ну насколько это "стандарт" я честно говоря не знаю :) Никогда не исследовал этот вопрос, но исключений из этого правила я не помню.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33209549
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl v6yЭто точно стандарт? Ссылку можно? (Вопрос для меня непринципиальный, поэтому самому искать ответ лень) Может быть это не стандарт, а типа соглашения компиляторов под Вин? Потому как под Линуксом по умолчанию никаких подчеркиваний впереди не добавляется - или там стандарт нарушают?
Ну насколько это "стандарт" я честно говоря не знаю :) Никогда не исследовал этот вопрос, но исключений из этого правила я не помню.
Я прошу прощений за занудство, но можно уточнить - исключений из какого правила и где? Потому как повторю еще раз: В Линуксе (да и во FreeBSD, а возможно и в других UNIX-ах) никаких подчеркиваний к именам функций, если не указать специальный ключик, не добавляется При линковке здесь ищется именно функция main, а не _main, и если этот ключик указать при компиляции основного модуля, то будут проблемы. Далее, как следствие, все стандартные библиотеки скомпилированы с именами функций без ведущего подчеркивания, и если в модуле, компилируемом с вышеуказанным ключом, попытаться вызвать функцию (скажем printf) из такой библиотеки, то получим undefined name.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33211420
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6yЯ прошу прощений за занудство, но можно уточнить - исключений из какого правила и где?
из правила: имя функции при компиляции предваряется знаком подчеркивания в C либо псевдослучайно (на основе имени класса) сгенерированым набором символом для C++ . Я не знаю зачем это делается, но все компиляторы чьи объектники и ассемблерный код я рассматривал делают именно так.
Я ни разу не рассматривал объектники сгенирование гнусью под FreeBSD и Linux. Потому что там библиотеки собираются тем же компилятором что и пользовательские программы, и различий в форматах библиотек быть не может.
А вот различных компиляторов под MS-DOS и Windows много, приходится иногда разбираться чем сделана та или иная библиотека. И все DOS/Windows компиляторы этому правилу следуют. Кстати, под QNX4 использовался Watcom чьи корни идут из ДОС - там тоже использовались подчеркивания, хоть QNX тоже юниксоподобная ОС :) В QNX6 уже GNU C используется, так что там может быть и нету подчерков в библиотеке.

v6yДалее, как следствие, все стандартные библиотеки скомпилированы с именами функций без ведущего подчеркивания, и если в модуле, компилируемом с вышеуказанным ключом, попытаться вызвать функцию (скажем printf) из такой библиотеки, то получим undefined name.
Все верно c точностью до наоборот :) Если например в MS VC скомпилировать модуль вызывающий printf() с запретом использовать подчеркивания - этот printf() не будет найден в стандартной библиотеке, потому что он там лежит как _printf() :)
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33211716
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Вот и я говорю - в форточках с досом одни правила без исключений, а в Линуксе другие. Намекаю значит, что это типа соглашение для той или иной ОС, а не правило или тем более стандарт вообще, как можно подумать из ваших постов :)
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33211761
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v6y White Owl
Вот и я говорю - в форточках с досом одни правила без исключений, а в Линуксе другие. Намекаю значит, что это типа соглашение для той или иной ОС, а не правило или тем более стандарт вообще, как можно подумать из ваших постов :)
Да при чем здесь операционная система вообще? Из всех известных мне компиляторов только один GNU C не подчиняется этому правилу. Вроде бы не подчиняется! У меня просто нет сейчас возможности проверить :). Да, это не стандарт, но тем не менее это широко известное правило.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33211941
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДа при чем здесь операционная система вообще? Из всех известных мне компиляторов только один GNU C не подчиняется этому правилу. Вроде бы не подчиняется! У меня просто нет сейчас возможности проверить :). Да, это не стандарт, но тем не менее это широко известное правило.
Ну как причем? :) Между прочим GNU C под Виндой эти подчеркивания добавляет (Подчиняется! Под Виндой!), а по крайней мере под Линукс и FreeBSD (POSIX?) - нет. Значит от операционки все таки зависит? :)
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33212347
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да наверно прога на gcc под виндой линкуется с какими-то системными библиотеками отсюда naming conventions.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33213316
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>псевдослучайно
скажут же))

Имена функций в объектнике генерятся совсем не случайным образом. Каждое имя состоит из имени класса а заодно и списка параметров которые эта функция (метод) юзает. Это имя генерится специфическиским образом в зависимости от компилера. Поэтому если под виндой мы прокомпилим два с++ кода - один на MSVC другой на gcc, то они не слинкуются. Однако, если использовать plain C - всё будет работать на ура.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33213410
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут как раз речь что на w2k в еxtern "C" (читай plain c) имя функции уродуется -- добавляется подчеркивание.
...
Рейтинг: 0 / 0
Ассемблерные вставки в c++. GNU
    #33213900
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenmanПоэтому если под виндой мы прокомпилим два с++ кода - один на MSVC другой на gcc, то они не слинкуются. Однако, если использовать plain C - всё будет работать на ура.
... то тоже не слинкуются. Разный формат объектников. :)
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ассемблерные вставки в c++. GNU
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]