當構建一個簡單的hello世界風格的項目試圖嵌入V8我得到一個LNK2001試圖使用V8從Visual Studio C++ CLI項目
error LNK2001: ""public: static class v8::Local __cdecl v8::String::New(char const *,int)" ([email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@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;
}
編譯似乎做工精細,我添加的節點0.8.0項目的V8目錄(節點v0.8.0 \的DEP \ V8 \包括)。就連接而言,我將這些庫添加爲附加依賴項。
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」 ,但後來我又得到了大量的LNK2001s。一個很小的選擇:
エラー 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 *)" ([email protected]@[email protected]@@Z)" は未解決です。 c:\...\HelloC++CLIWorld\HelloC++CLIWorld\MSVCMRTD.lib(ManagedMain.obj) HelloC++CLIWorld
現在呢?
第二個更私人的問題,如果我可以的話:我真的那麼愚蠢嗎?作爲一名經驗豐富的開發人員,他在二十年前曾與Pascal,C,x86 asm一起玩過,並且花費了十多年的時間主要用Java和C#爲生,還有其他一些語言,我是如何爲簡單而苦苦掙扎的你好世界風格的應用程序(和嘿,我甚至不試圖打印字符串,只是創建它!)三個固體小時?我一定是愚蠢的! (簡單的確認也很好) – SuperHorst 2012-07-07 12:33:27
「試圖從C++/CLI使用V8」並不完全是我們大多數人會認爲是「簡單的Hello世界風格的應用程序」。 – jalf 2012-07-07 13:59:36
事實上,我正在使用CLI部分的問題? – SuperHorst 2012-07-07 22:55:23