Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Butt-Head
Заблокирован
#1

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

29.07.2015, 11:46. Просмотров 1628. Ответов 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!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2015, 11:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое "position-independent code" (-fPIC in gcc) ? (C++):

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

Что такое "широкие" и "узкие" С-строки - C++
Гуглила, и не нашла более-менее нормального ответа на вопрос: "Что же такое "широкие" и "узкие" С-строки. Если приведете пример - вообще...

Ошибки "Expression syntax" и "Unreachable code" при реализации класса матриц - C++
Подскажите по коду. #include <iostream.h> #include <math.h> #include <string.h> #include <stdio.h> #include <windows.h> ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Что такое "нейронная сеть" и как она работает? - C++
Здравствуйте, объясните что такое нейронная сеть, как работает. Если можете дайте какой-нибудь простенький исходник, чтобы понять. Спасибо.

Что такое "Структурированные типы данных. Объекты" - C++
Что такое? Структурированные типы данных. Объекты. Разобрался.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
29.07.2015, 15:39 #2
Это ключ для библиотек Линукса, насколько я понял. Windows тут не при чём.
Butt-Head
Заблокирован
29.07.2015, 15:48  [ТС] #3
Цитата Сообщение от nmcf Посмотреть сообщение
Это ключ для библиотек Линукса
Ну как бы это ключ компилятора. GCC в виде minGW есть как бы и под виндой ...
ct0r
Игогошка!
1770 / 672 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
29.07.2015, 15:59 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если кратко.

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

На 32битной архитектуре статическую либу пофиг как компилить - с fpic или без него.
На 64битной - пофиг, если линкуем в бинарник, и не пофиг, если линкуем в динамические либы (тогда fpic обязателен - им включается магия 64битных регистров для смещений).
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
29.07.2015, 16:14 #5
Цитата Сообщение от Butt-Head Посмотреть сообщение
GCC в виде minGW есть как бы и под виндой
Добавлю, что на win весь код position-independent по умолчанию, поэтому -fpic в mingw на самом деле ничего не делает.
Butt-Head
Заблокирован
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 как бы нет ?
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,244
Записей в блоге: 3
Завершенные тесты: 1
29.07.2015, 16:31 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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.
Evg
Эксперт CАвтор FAQ
17633 / 5857 / 378
Регистрация: 30.03.2009
Сообщений: 16,156
Записей в блоге: 26
29.07.2015, 16:56 #8
ТС задал вопрос в контексте windows, а потому ему ссылка не будет интересна. Но для linux'оидов может пригодиться Вопросы по динамическим библиотекам
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
29.07.2015, 18:51 #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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/connect/arti...ndows-part-one
Evg
Эксперт CАвтор FAQ
17633 / 5857 / 378
Регистрация: 30.03.2009
Сообщений: 16,156
Записей в блоге: 26
29.07.2015, 20:39 #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от DrOffset Посмотреть сообщение
По этой причине системные библиотеки имеет заранее предвычисленные базовые адреса, чтобы они не пересекались и перебазирование не происходило
Идиотизм какой-то... Хотя в наш век дешёвой памяти некритично, но как-то выглядит туповато
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2015, 20:39
Привет! Вот еще темы с ответами:

Странный ответ ="-1.#IND" что такое? - C++
Нахожу сумму по формуле S=∑_(i=0)^10▒〖(-1)〗^(i+1)/i! Ответ не однозначный... помогите в чем ошибка? // applicationB-task2-zadacha3.cpp:...

Что такое "Data-driven programming"? - C++
пожалуйста, объясните на пальцах, что такое Data-driven programming ?

Что такое "сокет"? Посоветуйте литературу - C++
Сокет - название программного интерфейса для обеспечения обмена данными между процессами, что то вроде управления протоколом ? и...

Ребят помагите что такое "OpenGL" ? - C++
Пытаюсь создать Библиотеку "OpenGL" для игры так как видел много видио на ютубе но у себя такой библиотеке не вижу где её скачать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2015, 20:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru