1

我正在为 NodeJS 构建一个插件。

在 Windows 7 中工作得很好。但在 Windows XP 中,它不会加载,无论我做什么都不会打开它。ERROR: Unable to load shared library c:\tst\tst.node

我正在使用以下选项从 VS2010 编译 DLL:

  • c/c++ 选择

    /I"c:\tst\nodemodule\cvv8\include" /I"c:\tst\nodemodule\node-src\deps\uv\include" /I"c:\tst\nodemodule\node-src\deps\v8\include" /I"c:\tst\nodemodule\node-src\src" /I"c:\tst\nodemodule\node-src\deps\zlib" /I"c:\tst\nodemodule\node-src\deps\http_parser" /I"c:\tst\nodemodule\cvv8\include\cvv8" /Zi /nologo /W0 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "TST_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\tst.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue

  • 链接器选择

    /OUT:"c:\tst\tst.node" /INCREMENTAL:NO /NOLOGO /DLL "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST:NO /ManifestFile:"Release\tst.node.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:"c:\tst\tst.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /PGD:"c:\tst\tst.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

怎么了?这与 UTF-8 有关吗?

4

2 回答 2

3

诊断此类问题的最佳工具是dependency walker。在 dw 中打开你的 dll,你会立即明白为什么它不会加载:很可能有一些 dll/lib 缺少你的 dll 所依赖的。

于 2012-06-23T07:50:17.867 回答
2

在包含 windows 头文件(通常在 stdafx.h 中)之前,请尝试设置 windows 版本的宏以确保您没有使用仅在 XP 之后可用的 api。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx#setting_winver_or__win32_winnt

于 2012-06-23T07:54:44.657 回答