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

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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 а...

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

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

Решение

Если кратко.

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

На 32битной архитектуре статическую либу пофиг как компилить - с fpic или без него.
На 64битной - пофиг, если линкуем в бинарник, и не пофиг, если линкуем в динамические либы (тогда fpic обязателен - им включается магия 64битных регистров для смещений).
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
29.07.2015, 16:14 5
Цитата Сообщение от Butt-Head Посмотреть сообщение
GCC в виде minGW есть как бы и под виндой
Добавлю, что на win весь код position-independent по умолчанию, поэтому -fpic в mingw на самом деле ничего не делает.
0
Заблокирован
29.07.2015, 16:24  [ТС] 6
Цитата Сообщение от 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
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,897
Записей в блоге: 1
29.07.2015, 16:31 7
Лучший ответ Сообщение было отмечено 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
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.07.2015, 16:56 8
ТС задал вопрос в контексте windows, а потому ему ссылка не будет интересна. Но для linux'оидов может пригодиться Вопросы по динамическим библиотекам
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
29.07.2015, 18:51 9
Лучший ответ Сообщение было отмечено 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
21280 / 8303 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.07.2015, 20:39 10
Лучший ответ Сообщение было отмечено Butt-Head как решение

Решение

Цитата Сообщение от DrOffset Посмотреть сообщение
По этой причине системные библиотеки имеет заранее предвычисленные базовые адреса, чтобы они не пересекались и перебазирование не происходило
Идиотизм какой-то... Хотя в наш век дешёвой памяти некритично, но как-то выглядит туповато
0
29.07.2015, 20:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2015, 20:39
Помогаю со студенческими работами здесь

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

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

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

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

[РЕШЕНО] Настройка AVR-GCC для Code::Blocks - подскажите.
Помогите, пожалуйста, со следующим вопросом: Есть комп с Linux, на нем стоит AVR Toolchain....

Linux + Code::Blocks IDE + arm-none-eabi-gcc + openocd
Приветствую всех. Вот как 2 недели занялся изучением программирования микроконтроллеров с arm...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru