Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/89: Рейтинг темы: голосов - 89, средняя оценка - 4.69
Заблокирован

Что такое "position-independent code" (-fPIC in gcc) ?

29.07.2015, 11:46. Показов 19680. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
What is meant my position-independent code (-fPIC in gcc)? When would you use it? How are EXE and DLL's compiled with this regard in Windows? *

Что такое "position-independent code" ((-fPIC in gcc) ? С чем его едят? Когда нужно его использовать?
Как с этой фишкой собираются EXE и DLL под Windows? В чём особенность?

Добавлено через 1 час 8 минут
Важная тема теряется... Up!

Добавлено через 14 секунд
Важная тема теряется... Up!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2015, 11:46
Ответы с готовыми решениями:

Code::Blocks 16.01, wxWidgets 3.0.3, TDM-GCC. Что не так при запуске exe-файла приложения? (+)
Долго бился над связкой Code::Blocks и wxWidgets. Наконец добился, получил первый исполняемый файл. Но при его запуске получаю сообщение,...

Code::Blocks 16.01, wxWidgets 3.0.3, TDM-GCC. Что не так при запуске exe-файла полученного приложения? (+)
Долго бился над связкой Code::Blocks и wxWidgets. Наконец добился, получил первый исполняемый файл. Но при его запуске получаю сообщение,...

Просветите кто пользовался, что такое Visual Studio Code?
Добрый день. Полез скачивать MSVC на: https://code.visualstudio.com/?wt.mc_id=DX_841432 а там еще много чего лежит, в...

9
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.07.2015, 15:39
Это ключ для библиотек Линукса, насколько я понял. Windows тут не при чём.
0
Заблокирован
29.07.2015, 15:48  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Это ключ для библиотек Линукса
Ну как бы это ключ компилятора. GCC в виде minGW есть как бы и под виндой ...
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
29.07.2015, 15:59
Лучший ответ Сообщение было отмечено Butt-Head как решение

Решение

Если кратко.

Без fpic динамическая либа будет грузиться в память каждого процесса, который ее использует. С fpic - все процессы будут разделять одну копию. Это на 32битной. На 64битной без fpic будет ошибка линковки.

На 32битной архитектуре статическую либу пофиг как компилить - с fpic или без него.
На 64битной - пофиг, если линкуем в бинарник, и не пофиг, если линкуем в динамические либы (тогда fpic обязателен - им включается магия 64битных регистров для смещений).
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
29.07.2015, 16:14
Цитата Сообщение от Butt-Head Посмотреть сообщение
GCC в виде minGW есть как бы и под виндой
Добавлю, что на win весь код position-independent по умолчанию, поэтому -fpic в mingw на самом деле ничего не делает.
0
Заблокирован
29.07.2015, 16:24  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Добавлю, что на win весь код position-independent по умолчанию, поэтому -fpic в mingw на самом деле ничего не делает.
Да кстати, там же DLL именно для экономии ресурсов и был придуман.
Хмм, тогда получается фраза When would you use it? How are EXE and DLL's compiled with this regard in Windows? с подвохом и собирается всё и так с этим флагом и разницы между DLL-кой и EXE как бы нет ?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.07.2015, 16:31
Лучший ответ Сообщение было отмечено Butt-Head как решение

Решение

GCC Полное руководство.
-fpic
Компилятор генерирует независимый от положения в памяти, перемещаемый объектный код (position independent code, PIC). Такой формат необходим для получения модулей, используемых в составе динамической разделяемой библиотеки (shared library). Вся внутренняя адресация строится с использованием глобальной таблицы смешений (global offset table, GOT). При определении любого адреса содержащееся в таблице значение складывается с начальным адресом загрузки кода.
Опция используется при компиляции модулей, предназначенных для сохранения в разделяемых объектных библиотеках для их последующей динамической загрузки оттуда и использования программами во время их выполнения.
Если при использовании опции -fpic компоновщик выдает сообщение ошибки о том, что перемещаемый объектный код не работает, то следует перекомпилировать исходник с опцией -fPIC.
Некоторые системы имеют ограничение на размер таблицы смещений. Для процессора "Motorola m88k" предельный размер таблицы равен 16k, для "m68k" и "RS/6000" он равен 32k, для "Sparc" - 8k. PIC-код требует наличия определенной аппаратной поддержки и вследствие этоrо может работать только на платформах, имеющих такую поддержку.

-fPIC
Эта опция имеет то же значение, что и -fpic, но у нее есть дополнительные возможности, позволяющие обходить действующие на некоторых платформах ограничения размера таблиц смещений перемещаемого объектного кода. Такие ограничения действуют на машинах Motorola m88k, m68k и Sparc.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.07.2015, 16:56
ТС задал вопрос в контексте windows, а потому ему ссылка не будет интересна. Но для linux'оидов может пригодиться Вопросы по динамическим библиотекам
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
29.07.2015, 18:51
Лучший ответ Сообщение было отмечено Butt-Head как решение

Решение

Цитата Сообщение от Butt-Head Посмотреть сообщение
Хмм, тогда получается фраза When would you use it? How are EXE and DLL's compiled with this regard in Windows? с подвохом и собирается всё и так с этим флагом и разницы между DLL-кой и EXE как бы нет ?
Я не совсем там верно написал. В windows вообще position-independent code для DLL в том смысле, в котором оно есть в UNIX, не используется.
Адреса внутри Dll строятся относительно предпочтительного базового адреса, т.е. адреса заранее фиксированы. При загрузке Dll, если базовый адрес занят, то система производит перебазирование Dll, в том числе перевычисление каждого абсолютного адреса и изменение кода для осуществления использования новых адресов. После перебазирования библиотека перестает быть разделяемой, т.е. экономии памяти для динамически загружаемых библиотек уже не происходит. Но если базовый адрес не занят, то библиотека может быть использована разделяемо. По этой причине системные библиотеки имеет заранее предвычисленные базовые адреса, чтобы они не пересекались и перебазирование не происходило.

Добавлено через 2 минуты
Вот нашел небольшую статью в сравнении с Linux so: http://www.symantec.com/connec... s-part-one
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.07.2015, 20:39
Лучший ответ Сообщение было отмечено Butt-Head как решение

Решение

Цитата Сообщение от DrOffset Посмотреть сообщение
По этой причине системные библиотеки имеет заранее предвычисленные базовые адреса, чтобы они не пересекались и перебазирование не происходило
Идиотизм какой-то... Хотя в наш век дешёвой памяти некритично, но как-то выглядит туповато
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2015, 20:39
Помогаю со студенческими работами здесь

Установка gcc на Code::Blocks
Я скачал gcc, но там папка с кучей папок и файлами. Там нету ни одного .exe-файла. Мне в этом ничего не понятно. Я новичок в мире...

GNU GCC Compiler в Code Blocks
Установил по инструкции, но при запуске появляется сообщение Can't find compiler executable in your configured search path's for GNU GCC...

Проблемы с GCC в Visual Studio Code
Установил на новый ПК Visual Studio Code, установил MINGW-w64, скачал базовые файлы, прописал для mingw путь PATH, скачал расширение C/C++,...

Учим code::blocks компилировать gcc компилятором
не умею пользоваться форумом, переместите в нужную ветку если не туда попал в общем те кто пользуются кодблоксом знают что он С/С++ ...

Code Blocks компилятор GCC: где найти учебник
Скажите пожалуйста, где можно найти нормальный учебник для этого компилятора, а то большинство для Visual Stydio.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru