C++ 如何知道.lib需要哪个.dll

C++ 如何知道.lib需要哪个.dll,c++,visual-studio-2015,C++,Visual Studio 2015,我正试图在我的项目中使用V8。我将它构建为一个静态库,现在在out.gn/x64.release/obj文件夹中,我有很多.lib文件。基于此参数列表,发送到g++: --start-group \ out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\ third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a

我正试图在我的项目中使用V8。我将它构建为一个静态库,现在在
out.gn/x64.release/obj
文件夹中,我有很多
.lib
文件。基于此参数列表,发送到
g++

--start-group \
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a \
-Wl,--end-group
我在
v8.cpp
文件中未定义并链接了以下库:

#pragma comment(lib, "v8_base.lib")
#pragma comment(lib, "v8_libbase")
#pragma comment(lib, "v8_external_snapshot")
#pragma comment(lib, "v8_libplatform")
#pragma comment(lib, "v8_libsampler")
#pragma comment(lib, "icuuc.lib")
#pragma comment(lib, "icui18n.lib")
#pragma comment(lib, "inspector")
但现在我发现很多链接器错误:

1>------ Build started: Project: v8, Configuration: Release x64 ------
1>v8_libbase.lib(platform-win32.obj) : error LNK2001: unresolved external symbol __imp_timeGetTime
1>v8_libbase.lib(time.obj) : error LNK2001: unresolved external symbol __imp_timeGetTime
1>v8_libbase.lib(stack_trace_win.obj) : error LNK2001: unresolved external symbol __imp_StackWalk64
1>v8_libbase.lib(stack_trace_win.obj) : error LNK2001: unresolved external symbol __imp_SymSetOptions
...
1>C:\...\Documents\Visual Studio 2015\Projects\v8\x64\Release\v8.exe : fatal error LNK1120: 11 unresolved externals
我读过

如果要手动将*.lib文件添加到链接依赖项中, 然后,您还负责针对它们所依赖的任何DLL进行链接 在


所以我的问题是如何识别这些DLL以及如何链接它们?我正在使用Visual Studio 2015。

您应该阅读代码中使用的函数的文档

例如,您可以在“需求”部分找到:

  • 可再发行-DbgHelp.dll 5.1或更高版本
  • 标题-DbgHelp.h
  • Library-DbgHelp.lib
  • DLL-DbgHelp.DLL

这个lib-dll是非常特定于VisualStudio的东西。可能是,您应该添加resp。标签。我不知道这是否是必须的,但如果我们构建DLL,我们也会得到相应的LIB。链接需要LIB。dll本身没有链接-它是在运行时加载的。(lib提供了应该在相应的dll中找到的符号。)因此,我希望lib和dll具有相同的名称。最简单的方法是将dll存储在与exe相同的文件夹中,以便在启动exe时找到/绑定前者。另一个提示:如果Windows应用程序在dll依赖性方面存在问题,我们将使用免费工具:。我不确定这是否有助于解决您的问题…@Scheff,谢谢,但如果我们构建dll,我们也会得到相应的lib-没有相应的
.dll
,例如
v8_base
有以下文件:
v8_base.lib、v8_base.ninja、v8_stamp
。但是在
out.gn/x64.release
文件夹中有一堆
.dll
。幸运的是,我从“我不知道这是否是必须的…”开始,我看到了两个机会:第一,深入研究MSDN,了解这个dll是如何工作的。第二,将所有DLL放入目录。(或分别设置路径或执行任何其他适当的设置),一旦可执行文件运行,Dependency Walker可以告诉您实际使用/需要的内容。如果你选择第一个选项,我会非常喜欢你的答案,并给出清晰易懂的解释……我在谷歌上搜索了一下,找到了答案。如果搜索“windows dll导出符号”和“windows转储库符号”,您可能会发现更多信息。