Я имею ошибку LNK2028 когда я пытаюсь построить мою dll C ++ / CLI. Я использую статическую библиотеку с именем pano13 в моей программе, и я использую один из них. Все в моей программе хорошо, кроме одного вызова метода, который я делаю в библиотеку, где я получаю именно эти два исключения.
Error 21 error LNK2028: unresolved token (0A00013B) "int __cdecl panoCreatePanorama(struct fullPath * const,int,struct fullPath *,struct fullPath *)" (?panoCreatePanorama@@$$FYAHQAUfullPath@@HPAU1@1@Z) referenced in function "public: int __clrcall Surgeon::Stitcher::StitchImage(class System::Collections::Generic::List<class System::String ^> ^,class System::String ^)" (?StitchImage@Stitcher@Surgeon@@$$FQ$AAMHP$AAV?$List@P$AAVString@System@@@Generic@Collections@System@@P$AAVString@6@@Z) C:\Users\ndean_000\Documents\Visual Studio 2012\Projects\C#\CameraTest\Surgeon\Surgeon.obj Surgeon
Error 22 error LNK2019: unresolved external symbol "int __cdecl panoCreatePanorama(struct fullPath * const,int,struct fullPath *,struct fullPath *)" (?panoCreatePanorama@@$$FYAHQAUfullPath@@HPAU1@1@Z) referenced in function "public: int __clrcall Surgeon::Stitcher::StitchImage(class System::Collections::Generic::List<class System::String ^> ^,class System::String ^)" (?StitchImage@Stitcher@Surgeon@@$$FQ$AAMHP$AAV?$List@P$AAVString@System@@@Generic@Collections@System@@P$AAVString@6@@Z) C:\Users\ndean_000\Documents\Visual Studio 2012\Projects\C#\CameraTest\Surgeon\Surgeon.obj Surgeon
Я включил файл lib в настройки проекта и даже добавил оператор комментария #pragma для включения библиотеки, однако я получаю эту ошибку. Я понимаю, что это связано со смешением нативного и управляемого C ++, однако я не компилирую программу с помощью clr / pure, она компилируется с компиляцией по умолчанию clr / clr. У кого-нибудь есть идеи как это исправить?
Кстати, я решил это некоторое время назад, но я, вероятно, должен сказать, в чем проблема. Библиотека panotools — это библиотека C, а не библиотека C ++. Я не знал, что библиотекам C нужна директива extern C для использования в C ++. Так что все, что мне нужно было сделать, чтобы исправить мою проблему, было
extern "C"{
#include <panorama.h>
}
Где Panorama.h является включаемым файлом для библиотеки C Panotools. Мне всегда было интересно, для чего нужен extern C, и теперь я наконец понимаю его назначение.
Других решений пока нет …