DEF-файлы: хозяйке на заметку
От: LuciferSaratov Россия  
Дата: 16.10.16 13:15
Оценка: 21 (3) +1
Сборка динамически загружаемых библиотек в MSVC имеет существенное отличие от сборки таковых на gcc и clang. Данное отличие заключается в том, что в MSVC требуется вручную маркировать каждый экспортируемый символ при помощи declspec() в исходном тексте либо писать и поддерживать DEF-файл, что в случае C++ не так-то просто. Данное обстоятельство может доставить проблем в случае портирования крупного проекта с других платформ.

DEF-файл можно сгенерировать, проанализировав вывод dumpbin /symbols, и, соответственно, написать свою утилиту. Но зачем это делать, если это сделал уже кто-то другой? В интернетах встречаются perl-скрипты для решения этой проблемы, но я к перлу отношусь с подозрением, и дальнейшие поиски привели меня к такому решению:

cmake.exe -E __create_def MyDLL.def objects.txt


где objects.txt это текстовый файл со списком obj-файлов проекта.
cmake в этом качестве можно использовать как самостоятельную утилиту, перевод проекта на cmake не требуется.
Впрочем, при переводе проекта на cmake данная функциональность также легко доступна внутри cmake-скрипта через WINDOWS_EXPORT_ALL_SYMBOLS.
Re: DEF-файлы: хозяйке на заметку
От: Ops Россия  
Дата: 16.10.16 20:41
Оценка: +1
Здравствуйте, LuciferSaratov, Вы писали:

LS>Данное отличие заключается в том, что в MSVC требуется вручную маркировать каждый экспортируемый символ при помощи declspec() в исходном тексте


Ты так пишешь, будто в этом есть что-то плохое. ИМХО, явное понимание, какие потроха экспортируешь, а какие для библиотечных нужд, необходимо в первую очередь для автора библиотеки.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: DEF-файлы: хозяйке на заметку
От: LuciferSaratov Россия  
Дата: 16.10.16 20:54
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Ты так пишешь, будто в этом есть что-то плохое. ИМХО, явное понимание, какие потроха экспортируешь, а какие для библиотечных нужд, необходимо в первую очередь для автора библиотеки.


да я и не спорю.
а мне это понадобилось при работе над проектом, где для генерации DEF-файла используется своя собственная утилита, при этом утерянная.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.