链接许多.libs来制作DLL:未解析的外部符号_DllMainCRTStartup

前端之家收集整理的这篇文章主要介绍了链接许多.libs来制作DLL:未解析的外部符号_DllMainCRTStartup前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在执行在 Windows上构建LLVM 3.3的(可怕)任务,我已经到了我有一堆LLVM * .lib文件的阶段.我想将它们连接到一个巨大的共享DLL,但我正在努力(这是我第一次在Windows上链接东西).我试过了:
  1. link /DLL /MACHINE:X64 /OUT:LLVM3.3.dll LLVM*.lib

但无济于事.它错误

  1. LINK : warning LNK4001: no object files specified; libraries used
  2. LINK : error LNK2001: unresolved external symbol _DllMainCRTStartup
  3. LLVM3.3.dll : fatal error LNK1120: 1 unresolved externals

互联网建议添加/ DEFAULTLIB:corelib开关,所以我这样做但又有问题:

  1. > link /DLL /MACHINE:X64 /DEFAULTLIB:corelibc /OUT:LLVM3.3.dll LLVM*.lib
  2.  
  3. LINK : warning LNK4001: no object files specified; libraries used
  4. LINK : fatal error LNK1104: cannot open file 'corelibc.lib'

我该怎么做呢?

编辑:我设法修复上述问题,通过实现一个空的DllMain并从它做一个EmptyDllMain.obj:

  1. #include <windows.h>
  2.  
  3. BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved
  4. )
  5. {
  6. return TRUE;
  7. }

然后尝试:

  1. link /DLL /OUT:LLVM3.3.dll LLVM*.lib EmptyDllMain.obj

但我得到的DLL只有8kb – 它似乎错过了许多兆字节的LLVM库!我如何将它们包含在内?

EDIT2:我解决了Windows上的LLVM编译问题,看看这个document on github.

在将一个lib与错误的平台集合在一起(X86到X64)时,我曾经有过这个.确保构建所有LLVM * .lib并使用正确的工具链进行链接
  1. [...]\Microsoft visual Studio 10.0\VC\bin\amd64\ cl.exe and link.exe

你通过电话得到的

  1. "%PROGRAMFILES(X86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64

在混合MT和MD CRT时我也有类似的问题,我建议你坚持

  1. /MD (or /MDd for debug)

在为任何LLVM * .lib(以及链接到其中的其他外部库中的任何其他对象)编译对象时.

[编辑]

然后踢出那个丑陋的EmptyDllMain.obj!

[/编辑]

猜你在找的Windows相关文章