Помогите в понимании ЭКСПОРТА в Makefile.in - PullRequest
0 голосов
/ 18 апреля 2010

В Makefile.in существующего проекта c ++ в Linux (Ubuntu) он имеет это:

EXPORTS     = \
        gtkmozembed.h \
        gtkmozembed_glue.cpp \
        gtkmozembed_internal.h

Подскажите, пожалуйста, что означает ЭКСПОРТ?

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 апреля 2010

EXPORTS - это просто имя списка файлов. Это может означать, что эти файлы устанавливаются в место, где их могут использовать другие. Заголовочные файлы с деталями реализации, не представляющими интереса для пользователя библиотеки, могут оставаться закрытыми.

Файл .cpp в EXPORTS может означать, что он содержит скелетный код, который пользователи должны компилировать и ссылаться на свои проекты.

Ваш пример из Firefox. Это определяется как:

export:: $(EXPORTS) 
    $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR)

Копирование или установка файлов в Makefiles немного проблематична. Обратите внимание, что между копией и ее оригиналом нет зависимости.

0 голосов
/ 18 апреля 2010

Представьте себе, что:
Вы дизайнер библиотеки (DLL). Вы должны определить, что должна делать библиотека ... и после этого вы пишете это. Многие процессы могут использовать ваши функции из этой библиотеки DLL, в вашей памяти есть один фрагмент памяти.
Когда вы включаете эту библиотеку в свой проект (например, в c ++), вы должны добавить некоторую информацию о функциях в этой DLL.

Первый вариант:
Вы можете объявить некоторые интерфейсы библиотечных функций (тогда ваш компоновщик счастлив;)). Например: __declspec (dllexport) int my_function (char *);
После этого имена экспортируемых объектов завершаются в вашей программе (linker job;)) ... но Имена этих объектов зависят от языка, компилятора, бла-бла-бла

Второй вариант:
Вы добавляете в проект вашей библиотеки некоторую информацию для компоновщика (файл * .def). Этот файл состоит из двух разделов: БИБЛИОТЕКА и РАЗДЕЛЫ. БИБЛИОТЕКА - это внутреннее имя вашей библиотеки:
БИБЛИОТЕКА my_lib
В разделе ЭКСПОРТ находятся символы, которые можно экспортировать из библиотеки.
ЭКСПОРТ
function1
function2
function3

Как видите, у этих функций нет типов, формальных параметров и т. Д. Когда вы включаете эту библиотеку, у вас нет информации о функции.

Когда вы делаете это (файл .def) и компилируете свою библиотеку, у вас есть файлы .dll и .lib. Второй файл можно использовать для связи библиотеки во время выполнения.
Если вы хотите проверить экспорт в этой библиотеке, вы можете использовать "Dependecny Walker" или "dumpbin":
свалка my.dll / экспорт

Далее вы можете загрузить эту библиотеку:
первый вариант: __declspec (dllimport) int my_function (char *);
или
второе: HMODULE LoadLibrary (LPCSTR lpszLibName);

заключение: использование экспорта может создать более универсальную библиотеку (но более сложную)

(извините за мой очень плохой английский: /)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...