在Visual Studio中将项目与ntdll.dll链接

时间:2015-12-03 09:42:11

标签: c visual-studio lmdb

我尝试使用Visual Studio构建 lmdb ,但收到以下错误:

  

mdb.obj:错误LNK2001:未解析的外部符号_NtMapViewOfSection @ 40
  mdb.obj:错误LNK2001:未解析的外部符号_NtClose @ 4
  mdb.obj:错误LNK2001:未解析的外部符号_NtCreateSection @ 28

要在代码中首次使用此函数,请注意以下内容:

/* We use native NT APIs to setup the memory map, so that we can
 * let the DB file grow incrementally instead of always preallocating
 * the full size. These APIs are defined in <wdm.h> and <ntifs.h>
 * but those headers are meant for driver-level development and
 * conflict with the regular user-level headers, so we explicitly
 * declare them here. Using these APIs also means we must link to
 * ntdll.dll, which is not linked by default in user code.
 */
NTSTATUS WINAPI
NtCreateSection(OUT PHANDLE sh, IN ACCESS_MASK acc,
  IN void * oa OPTIONAL,
  IN PLARGE_INTEGER ms OPTIONAL,
  IN ULONG pp, IN ULONG aa, IN HANDLE fh OPTIONAL);

我如何在Visual Studio中链接ntdll.dll?我明白,这个问题很愚蠢,但我在几个小时内找不到解决方案..

2 个答案:

答案 0 :(得分:1)

您可以在Visual Studio中与ntdll.lib链接。

答案 1 :(得分:0)

非常感谢@datjko!他是对的:

  

我认为trunk中的版本号没有被错误更新。   版本0.9.17于2015年11月30日发布,可在此处获得   github.com/LMDB/lmdb/releases/tag/LMDB_0.9.17。据我所知,   在发布后,使用来自ntdll的函数被添加到trunk   github.com/LMDB/lmdb/commit / ...也于2015年11月30日。所以,除非你   想要测试我最近的开发版本,我相信你   更好地使用最近的稳定版本。

按照他的建议解决了问题。