【发布时间】:2013-07-17 18:47:06
【问题描述】:
我正在执行在 Windows 上构建 LLVM 3.3 的(可怕的)任务,我已经到了拥有大量 LLVM*.lib 文件的阶段。我想将它们链接到一个巨大的共享 DLL,但我很挣扎(这是我第一次在 Windows 上链接东西)。我试过了:
link /DLL /MACHINE:X64 /OUT:LLVM3.3.dll LLVM*.lib
但无济于事。它错误:
LINK : warning LNK4001: no object files specified; libraries used
LINK : error LNK2001: unresolved external symbol _DllMainCRTStartup
LLVM3.3.dll : fatal error LNK1120: 1 unresolved externals
互联网建议添加/DEFAULTLIB:corelib 开关,所以我这样做了,但又出现了问题:
> link /DLL /MACHINE:X64 /DEFAULTLIB:corelibc /OUT:LLVM3.3.dll LLVM*.lib
LINK : warning LNK4001: no object files specified; libraries used
LINK : fatal error LNK1104: cannot open file 'corelibc.lib'
我该怎么做?
编辑:我设法解决了上述问题,方法是实现一个空的DllMain 并从中创建一个EmptyDllMain.obj:
#include <windows.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
然后尝试:
link /DLL /OUT:LLVM3.3.dll LLVM*.lib EmptyDllMain.obj
但我得到的 DLL 只有 8kb - 它似乎错过了许多兆字节的 LLVM 库!如何让它们包含在内?
EDIT2:我解决了Windows上的LLVM编译问题,看看这个document on github。
【问题讨论】:
-
DLL 很小的原因是 lib 文件仅在需要满足引用时才链接。你没有任何东西——所以没有任何联系。选项有 1. 写一个 DEF 文件来创建引用; 2.使用
-WHOLEARCHIVE:<lib>