Экспорт символов при компиляции DLL - MSVC - PullRequest
4 голосов
/ 25 ноября 2010

У меня есть общая библиотека, которая использует CMake в качестве системы сборки. Он прекрасно компилируется на машинах Linux с GCC. Сейчас я пытаюсь скомпилировать на Windows. MSVC не будет экспортировать символы, пока не будет указано. Я знаю о __declspec(dllexport). Но пример, представленный в вики CMake, сбивает с толку. Пожалуйста, рассмотрите следующий код.

#if defined (_WIN32) 
  #if defined(MyLibrary_EXPORTS)
    #define  MYLIB_EXPORT __declspec(dllexport)
  #else
    #define  MYLIB_EXPORT __declspec(dllimport)
  #endif /* MyLibrary_EXPORTS */
#else /* defined (_WIN32) */
 #define MYLIB_EXPORT
#endif

Я понимаю __declspec(dllexport), но интересно, почему __declspec(dllimport) используется? И как мне это использовать? Это как MYLIB_EXPORT void function()?

Предположим, у меня есть функция C с именем foo(). Это внутренне использует несколько static функций. При экспорте мне тоже нужно экспортировать статические функции? Или достаточно экспортировать только те функции ввода, которые являются частью API?

Любая помощь будет оценена.

Ответы [ 2 ]

5 голосов
/ 25 ноября 2010

Достаточно экспортировать только входные функции, входящие в состав API. Нет необходимости экспортировать статические функции.

Кроме того, нет необходимости использовать __declspec (dllimport) для функций. Это нужно только для данных. Windows автоматически позаботится о выполнении импорта функций.

Полезны следующие ссылки:

http://msdn.microsoft.com/en-us/library/ms235636(VS.80).aspx

http://msdn.microsoft.com/en-us/library/ms682589(VS.85).aspx

1 голос
/ 25 ноября 2010

Обычно используется для заголовочного файла, который используется как вашей библиотекой для компиляции, так и ее клиентами; Когда вы включаете заголовок в свою библиотеку, вы определяете MyLibrary_EXPORTS, и он будет экспортировать символы, а когда вы включаете заголовок в клиентское приложение, он будет импортировать их вместо этого.

Нет, вам нужно только экспортировать точки входа API - вам не нужно экспортировать статические функции.

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