gpt4 book ai didi

dll - 链接大量 .lib 以生成 DLL : unresolved external symbol _DllMainCRTStartup

转载 作者:行者123 更新时间:2023-12-02 02:59:12 25 4
gpt4 key购买 nike

我正在 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 库!我如何将它们包含在内?

<小时/>

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

最佳答案

我曾经在将一个库与错误的平台集(X86 到 X64)链接在一起时遇到过这种情况。确保所有 LLVM*.lib 均已构建并使用正确的工具链链接:

[...]\Microsoft visual Studio 10.0\VC\bin\amd64\ cl.exe and link.exe

您可以通过调用获得

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

我在混合 MT 和 MD CRT 时也遇到了类似的问题,我建议你坚持使用

/MD (or /MDd for debug) 

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

[编辑]

并踢出那个丑陋的 EmptyDllMain.obj !

[/编辑]

关于dll - 链接大量 .lib 以生成 DLL : unresolved external symbol _DllMainCRTStartup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17729886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com