есть проблема с нерешенной внешностью.
проблема -> файл заголовка (myImpressiveHeaderFile.h) говорит, что он не может найти символ. Но другой файл (holys_i.c) c-файл существует в этом проекте и содержит эти символы.
если я создаю новый win32-console-project (пустой) и добавляю эти файлы (и третий файл, с основной функцией и включающим заголовочный файл), он работает отлично.
НО -> если я позволю node-gyp построить проект (те же файлы, кроме основного файла xD, который является файлом spcefic узла с v8.h и node.h — но также включающим заголовочный файл) — я получил ошибки (LNK 2001 см. Выше) ,
кажется, что компоновщик переходит в c-файл или нет, если я создаю его с помощью node-gyp? или node-gyp не компилирует c-файлы? что не может быть? или же?
У вас есть идеи, что я могу сделать / проверить / проверить?
РЕДАКТИРОВАТЬ (добавить пример):
Первый пример (работает)!
Заголовочный файл (1) (добавляется как внешняя переменная — имя top.h)
EXTERN_C const IID IID_IOPCServer;
C-File (определил var — имя 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 — используется переменная — имя stop.cpp)
hr = CoCreateInstance (clsid, NULL, CLSCTX_LOCAL_SERVER ,IID_IOPCServer, (void**)&m_IOPCServer);
Основной файл CPP (включает заголовочный файл 2 — не используется var — name test.cpp)
Этот Фюле использует Функции stop.cpp. Ans stop.cpp использовал extern var.
Когда я добавляю эти файлы в пустой проект консоли win32 — это работает. ВСЕ ХОРОШО!
НО в другом примере
(тот же top.h, тот же top_i.c, тот же stop.h и тот же stop.cpp)
я позволил построить узел-гип.
Обязательный Gyp:
{
"targets": [
{
"target_name": "test",
"sources": ["src/top.h",
"src/top_i.c",
"src/stop.h",
"src/stop.cpp",
"src/test.cpp"]
}
]
}
внутри test.cpp sth вот так:
#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);
это Пример проваливается oo
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]
Задача ещё не решена.
Других решений пока нет …