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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.