Ошибка компоновщика LNK2019 прослежена до __stdcall Я думаю, я получил правильную библиотеку - что я могу сделать, чтобы решить эту проблему? - PullRequest
0 голосов
/ 16 декабря 2010

Я пытаюсь портировать LabCVI Projekt на MSVS 2010 C ++ Express. Есть строка кода, которая выглядит так:

if (InitCVIRTE == 0) return 0;

Произошла ошибка компоновщика: LNK2019 "_InitCVIRTEEx @ 12" - все соответствующие заголовки уже содержат операторы cpp:

#ifdef __cplusplus 
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

Я проследил ошибку до этих фрагментов, которые я объединил для вас:

#define CVIFUNC __stdcall
int CVIFUNC InitCVIRTEEx (void *hInstance, char *argv[], void *reserved);
#define InitCVIRTE InitCVIRTEEx

Подводя итог:

int __stdcall InitCVIRTEEx (void *hInstance, char *argv[], void *reserved);

Этот вызов должен быть определен в файле cvirt.lib, который добавляется в пути к библиотекам (CVI2009 \ extlib \ msvc). Ошибка компоновщика все еще происходит, и я просто не понимаю, почему.

Должна ли библиотека добавляться другим способом? Как я могу проверить, что это действительно правильная библиотека? Ошибка означает что-то совершенно другое?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Вы должны указать компоновщику, в каких библиотеках ссылаться. Путь поиска сообщит компоновщику только, где найти эти библиотеки.

т.е.:

Linker Libraries:
 - a.lib
 - b.lib

Linker Search Dirs:
 C:\project_a\lib
 C:\project_b\lib

компоновщик будет искатьобе папки для a.lib и b.lib, но не будут связывать библиотеки, о которых не было сказано.

0 голосов
/ 16 декабря 2010

Я как-то только что решил - я добавил cvirt.lib и cvisupp.lib прямо к проекту. Ошибка исчезла ...

однако я все еще не удовлетворен, потому что я уже дал проекту путь, по которому он должен искать библиотеки. Я добавлю еще один вопрос в stackoverflow, спрашивая, в чем разница.

...