使用VisualStudio生成COM dll时,我真正所需要的只是从{dll'本身导出的DllCanUnloadNow
符号(以及三个相关的符号)。 没人会链接到我的库,因此我根本不会对.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
问题:
答案 0 :(得分:15)
Visual Studio的链接器有/IMPLIB
选项,允许您指定.lib
和.exp
文件的输出位置。
您可以在项目的属性中修改此选项:
Configuration Properties > Linker > Advanced > Import Library
您可以将其设置为以下内容,例如:
$(Configuration)\$(TargetName).lib
链接器将使用与.exp
相同的名称创建.lib
文件。
答案 1 :(得分:2)
不确定如何关闭它们,但您可以进行构建后步骤以删除它们,如下所示:
del $(OutDir)\$(ProjectName).lib
del $(OutDir)\$(ProjectName).exp
(在VS2008上它是[Project] - > [Properties],然后是Configuration Properties-> Build Events-> Post-Build Events)
(注意我知道你知道怎么做,但这个答案可能对下一位Google员工有帮助......)
答案 2 :(得分:1)
COM库中的一些函数用__declspec(dllexport)声明。这意味着它们被导出(可能由GetProcAdress函数使用),并且链接器认为需要链接到这个动态库(无论是exe还是dll - 通常结构是相同的)并创建* .lib和* .exp文件。
为了避免创建这些文件,您需要从函数声明中删除所有__declspec(dllexport)
答案 3 :(得分:-1)
为什么生成这些文件有问题?当然,如果人们不打算直接链接到他们所有你需要做的就是不分发这些文件,只是简单地分发DLL。