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

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

29.07.2015, 11:46. Показов 19319. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru