0

C ++ / CLI dllをビルドしようとすると、LNK2028エラーが発生します。プログラムでpano13という静的ライブラリを使用しており、その1つのメソッドを使用しています。私がライブラリに対して行う1つのメソッド呼び出しを除いて、プログラム内のすべてが正常です。ここで、これらの正確な2つの例外が発生します。

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++とマネージC++の混合に関係していることは理解していますが、プログラムをclr / pureでコンパイルしているのではなく、デフォルトのclrコンパイルである/clrでコンパイルしています。誰かがそれを修正する方法について何かアイデアがありますか?

4

1 に答える 1

0

ちなみに、私は少し前にこれを解決しましたが、おそらく問題が何であったかを言う必要があります。panotoolsライブラリはCライブラリであり、C++ライブラリではありません。CライブラリがC++で使用されるexternCディレクティブを必要としていることを知りませんでした。だから私は自分の問題を解決するためにやらなければならなかったのは

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

ここで、panorama.hは、panotoolsCライブラリのインクルードファイルです。extern Cは何のためにあるのかといつも思っていましたが、ついにその目的がわかりました。

于 2012-11-09T04:05:46.857 に答える