native — C ++ / CLI LNK2028 при попытке использовать статический lib другой библиотеки

Я имею ошибку 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. У кого-нибудь есть идеи как это исправить?

0

Решение

Кстати, я решил это некоторое время назад, но я, вероятно, должен сказать, в чем проблема. Библиотека panotools — это библиотека C, а не библиотека C ++. Я не знал, что библиотекам C нужна директива extern C для использования в C ++. Так что все, что мне нужно было сделать, чтобы исправить мою проблему, было

extern "C"{
#include <panorama.h>
}

Где Panorama.h является включаемым файлом для библиотеки C Panotools. Мне всегда было интересно, для чего нужен extern C, и теперь я наконец понимаю его назначение.

0

Другие решения

Других решений пока нет …