有一个未解决的外部问题。
问题 - >标题(myImpressiveHeaderFile.h)文件告诉他找不到符号。但是另一个文件(holys_i.c)在这个项目中存在一个c文件并保存了这个符号。
如果我创建一个新的win32-console-project(空)并添加这些文件(以及第三个文件,带有main函数并包含头文件),它可以很好地工作。
但是 - >如果我让node-gyp构建项目(除主文件xD之外的相同文件,即v8.h和node.h的节点spcefic文件 - 但也包括头文件) - 我收到错误(LNK 2001见上文)。
如果我使用node-gyp创建它,链接器似乎不会或稍后使用c-file?或者node-gyp不能编译c文件?那不是吗?或?
您对我能做什么/测试/检查有什么想法吗?
编辑(添加示例):
第一个例子(有效)! 头文件(1)(添加类似extern变量名称top.h)
EXTERN_C const IID IID_IOPCServer;
C-File (定义了var-name top_i.c)
MIDL_DEFINE_GUID(IID, IID_IOPCServer,0x39c13a4d,0x011e,0x11d0,0x96,0x75,0x00,0x20,0xaf,0xd8,0xad,0xb3);
另一个头文件(2)(包含头文件1 - top.h - 不做任何相关 - 名称stop.h)
头文件的CPP文件(2)(包括头文件2 - 使用的var - 名称stop.cpp)
hr = CoCreateInstance (clsid, NULL, CLSCTX_LOCAL_SERVER ,IID_IOPCServer, (void**)&m_IOPCServer);
主要CPP文件(包括头文件2 - 不使用var - name test.cpp) 这个Fule使用stop.cpp的函数。 Ans stop.cpp使用了extern var。
当我将这些文件添加到空的win32控制台项目时 - 它可以工作。一切都很精细!
但在其他示例中
(相同的top.h,相同的top_i.c,相同的stop.h和相同的stop.cpp) 我让node-gyp构建。
绑定Gyp:
{
"targets": [
{
"target_name": "test",
"sources": [
"src/top.h",
"src/top_i.c",
"src/stop.h",
"src/stop.cpp",
"src/test.cpp"
]
}
]
}
在test.cpp里面,像这样:
#include <node.h>
#include <v8.h>
#include "stop.h"
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("world"));
}
void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Method);
}
NODE_MODULE(test, init);
此示例失败了
stop.obj : error LNK2001: unresolved external symbol "IID_IOPCServer".
[D:\Dev\Workspaces\Nax\Github\node-test\build\test.vcxproj]
stop.obj : error LNK2001: unresolved external symbol "IID_IOPCItemMgt".
[D:\Dev\Workspaces\Nax\Github\node-test\build\test.vcxproj]
stop.obj : error LNK2001: unresolved external symbol "IID_IOPCSyncIO".
[D:\Dev\Workspaces\Nax\Github\node-test\build\test.vcxproj]
D:\Dev\Workspaces\Nax\Github\node-test\build\Release\test.node : fatal error LNK1
120: 3 unresolved externals [D:\Dev\Workspaces\Nax\Github\node-test\build\test.vcxproj]