使用链接到静态库的DLL

时间:2010-12-06 19:44:58

标签: c++ dll static-libraries

我正在尝试在Visual C ++中构建一个解决方案,其中我有一个前端项目,它引用了我创建的DLL项目。在DLL项目中,我链接到一个静态库(我还没写过),它有静态对象和定义。一切都很好,但我有链接问题。

我有几个问题。首先,我只应该为前端引用但未导出的对象获取未解析的符号,对吧?我希望DLL是静态库的唯一接口,并且不要在前端直接引用它的任何部分,但是我从这个库中获得了许多未解析的符号。这些符号似乎是#included,并且至少有些符号不是由DLL项目直接链接的。我怀疑它与静态库中的静态声明有关,但我该如何处理这些?

一些未解决的符号错误:

2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: __thiscall SharkException::SharkException(char const *,int,char const *)" (??0SharkException@@$$FQAE@PBDH0@Z)
2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: static class Bernoulli Rng::coinToss" (?coinToss@Rng@@2VBernoulli@@A)
2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall ChromosomeT<bool>::operator<(class Chromosome const &)const " (??M?$ChromosomeT@_N@@$$FUBE_NABVChromosome@@@Z)

1 个答案:

答案 0 :(得分:0)

导出的符号被破坏。如果使用与您使用的编译器(或编译器版本)不同的编译器(或编译器版本)编译静态库,则可能是应用程序期望看到的符号是使用不同的名称修改方案在静态库中定义的。您可以使用以下命令获取静态库中使用的名称修改,然后将其与错误消息中的名称进行比较:

>pushd <path_to_msvc_dir>\Microsoft Visual Studio X.0\VC\bin
>dumpbin /all [static_lib_path] > out.txt
>type out.txt | find /I "SharkException"
>type out.txt | find /I "coinToss"
>type out.txt | find /I "ChromosomeT"
BTW,使用静态lib的DLL是否使用您的应用程序/解决方案所使用的相同编译器进行干净编译?

相关问题