1. Являются ли разделяемые библиотеки и динамические библиотеки одинаковыми?
Windows просто помечает их как .dll
, а linux помечает их как .so
?
2. Если общий библиотека имеет массу функций, которые использует программа, когда эти функции загружаются в память?
В начале программы? когда конкретная функция на самом деле вызывается?
3. Если я сделаю библиотеку, как это:
#ifndef SHARED_H
#define SHARED_H
#include <iostream>
#include <string>
namespace shared
{
void Function1(void);
void Function2(void);
void Function3(void);
void Function4(void);
void Function5(void);
void Function6(void);
...
void Function99(void);
void Function100(void);
...
}
//assume none of these functions call each other
#endif
и моя клиентская программа вызывает только одну из этих функций, будет ли снижение производительности из-за того, что все остальные дополнительные функции не используются?
Не беспокоиться о времени компиляции .. просто фактическое время выполнения
4. Отличается ли сценарий вопроса 3, если я использую класс:
#ifndef SHARED_H
#define SHARED_H
#include <iostream>
#include <string>
class Shared
{
public:
void Function1(void);
void Function2(void);
void Function3(void);
void Function4(void);
void Function5(void);
void Function6(void);
...
void Function99(void);
void Function100(void);
...
private:
protected:
};
//assume none of these functions call each other
#endif
5. Я использую для создания много объектов (файлов .o), а затем связываю их вместе, чтобы сделать мой исполняемый файл.
было бы лучше превратить все мои объекты (которые обычно являются классами) в файл .so И ТОГДА связать их вместе?
Я понимаю, что исполняемый файл будет опираться на файл .so, в отличие от первого подхода, когда объекты могут быть просто удалены после компиляции, но какова рекомендация по этому поводу?
6. Я немного не в курсе разницы между -fPIC и -fpic
Я слышал, что -fPIC всегда будет работать, а -fpic зависит от цели.
Что означает целевой зависимый? Если библиотека всегда будет компилироваться и использоваться на одном компьютере, могу ли я использовать -fpic?
некоторые из этих вопросов могут быть тривиальными, но я хочу быть уверенным
о вещах, которые я прочитал до сих пор. Я ценю любой и
все ответы
* При необходимости: использование gcc версии 4.6.1 (Ubuntu / Linaro 4.6.1-9ubuntu3)