在构建一个尝试嵌入 v8 的简单 hello-world 风格项目时,我得到一个
错误 LNK2001: ""public: static class v8::Local __cdecl v8::String::New(char const *,int)" (?New@String@v8@@SA?AV?$Local@VString@v8@@ @2@PEBDH@Z)"
我的项目设置有问题,我似乎无法弄清楚。这是我的源文件:
#include "stdafx.h"
#include "v8.h"
using namespace System;
#pragma unmanaged
void test()
{
v8::Local<v8::String> source = v8::String::New("'Hello' + ', World'");
}
#pragma managed
int main(array<System::String ^> ^args)
{
return 0;
}
编译好像没问题,我添加了node 0.8.0项目的v8目录(node-v0.8.0\deps\v8\include)。在链接方面,我将这些库添加为附加依赖项。
node-v0.8.0\Release\lib\v8_base.lib
node-v0.8.0\Release\lib\v8_snapshot.lib
我在 Windows 7 上,64 位。我的项目设置为构建 x64,node.js 也是如此(使用“Windows x64 安装程序”安装)。怎么了?
更新我认为在为 x64 构建时,我添加的附加依赖项被完全忽略(无论我添加与否,错误消息都是相同的)。但是在为 win32 构建时,我收到不同的错误消息。(顺便说一句:这是否意味着 lib 文件适用于 x86 而不是 x64 - 正如我所假设的那样 - 为什么链接器不告诉我?更新:dumpbin 告诉我,lib 文件确实适用于 x86)。
除了 v8_base 和 v8_snapshot 之外,链接器错误导致我添加
winmm.lib
ws2_32.lib
这消除了所有“未解决的外部符号”错误。但现在我得到一个 LNK2005“已定义”错误:
エラー 1 error LNK2005: __matherr は既に LIBCMT.lib(_matherr_.obj) で定義されています。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCRTD.lib(merr.obj) HelloC++CLIWorld
我试过/NODEFAULTLIB:LIBCMT
了,然后我得到一个 LNK2001“未解析的外部符号”:
エラー 1 error LNK2001: 外部シンボル "__HUGE" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\v8_base.lib(heap.obj) HelloC++CLIWorld
我也尝试了`/NODEFAULTLIB:MSVCRTD',但后来我又得到了大量的 LNK2001。一个小小的选择:
エラー 1 error LNK2001: 外部シンボル "___native_dllmain_reason" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(mstartup.obj) HelloC++CLIWorld
エラー 2 error LNK2001: 外部シンボル "___native_vcclrit_reason" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(mstartup.obj) HelloC++CLIWorld
エラー 3 error LNK2001: 外部シンボル "___native_startup_state" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(mstartup.obj) HelloC++CLIWorld
エラー 4 error LNK2001: 外部シンボル "___native_startup_lock" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(mstartup.obj) HelloC++CLIWorld
エラー 5 error LNK2001: 外部シンボル ""extern "C" int __cdecl __wgetmainargs(int *,wchar_t * * *,wchar_t * * *,int,struct _startupinfo *)" (?__wgetmainargs@@$$J0YAHPAHPAPAPA_W1HPAU_startupinfo@@@Z)" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(ManagedMain.obj) HelloC++CLIWorld
怎么办?