0

尝试构建 C++/CLI dll 时出现 LNK2028 错误。我在我的程序中使用了一个名为 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 编译进行编译。任何人有任何想法如何解决它?

4

1 回答 1

0

顺便说一句,我在一段时间前解决了这个问题,但我可能应该说出问题所在。panotools 库是 C 库,而不是 C++ 库。我不知道 C 库需要在 C++ 中使用 extern C 指令。所以我所要做的就是解决我的问题

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

其中 panotools.h 是 panotools C 库的包含文件。我一直想知道 extern C 是干什么用的,现在我终于明白了它的用途。

于 2012-11-09T04:05:46.857 回答