Подтвердить что ты не робот

Но мне не нужен этот .lib или .exp файл для моей COM-библиотеки!

При создании COM-библиотеки DLL с VisualStudio мне действительно нужно, чтобы символ DllCanUnloadNow (и три связанных) был экспортирован из самой DLL. Никто не собирается ссылаться на мою библиотеку, поэтому я вообще не заинтересован в файле .lib или в .exp файле.

Однако мне не удается запретить создание этих файлов. (примечание: я знаю, как можно удалить их на этапе после сборки)

Это мои аргументы компоновщика:

/OUT:"u:/cada-nt/bin/PData.dll" 
/INCREMENTAL:NO 
/NOLOGO 
/DLL 
/MANIFEST:NO 
/DEF:"PData.def" 
/DEBUG 
/PDB:"u:/cada-nt/pdb/PData.pdb" 
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
                    advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
                    odbc32.lib odbccp32.lib

Вопрос:

  • Кому-нибудь удалось создать файлы .lib и .exp?
  • Кто-нибудь знает, почему эти файлы сгенерированы?
4b9b3361

Ответ 1

У компоновщика Visual Studio есть опция /IMPLIB, которая позволяет указать местоположение вывода для файлов .lib и .exp.

Вы можете изменить этот параметр в свойствах проекта:

Configuration Properties > Linker > Advanced > Import Library

Вы можете установить его для следующего, например:

$(Configuration)\$(TargetName).lib

Компонент создаст файл .exp с тем же именем, что и .lib.

Ответ 2

Не уверен, как отключить их, но вы можете сделать шаг после сборки, чтобы удалить их, например:

del $(OutDir)\$(ProjectName).lib
del $(OutDir)\$(ProjectName).exp

(на VS2008 он [Проект] → [Свойства], затем Свойства конфигурации- > События сборки- > События после сборки)

(заметьте, я понимаю, что вы знаете, как это сделать, но этот ответ может помочь следующему гуглеру...)

Ответ 3

Есть некоторые функции внутри COM-библиотеки, объявленные с помощью __declspec (dllexport). Это означает, что они экспортируются (могут использоваться функцией GetProcAdress), и компоновщик считает, что необходимо связать эту динамическую библиотеку (независимо от того, является ли она exe или dll - в целом структура одинакова) и создает *.lib и *.exp.

чтобы избежать создания этих файлов, вам нужно удалить все __declspec (dllexport) из объявлений функций

Ответ 4

почему возникает проблема с созданием этих файлов? Конечно, если люди не собираются напрямую ссылаться на них, все, что вам нужно сделать, это не распространять эти файлы и просто распространять только DLL.