Эх сурвалжийг харах

添加protobuf默认dll链接时,WxAdoInterface被WxService调用运行时出错:google::protobuf::FatalException的解决办法。

Jeff 6 жил өмнө
parent
commit
72f2d06c2d
1 өөрчлөгдсөн 27 нэмэгдсэн , 1 устгасан
  1. 27 1
      source/疑难.txt

+ 27 - 1
source/疑难.txt

@@ -11,4 +11,30 @@ error LNK2005: _DllMain@12 
 >    Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib: 
 >    Searching D:\vs2008\VC\atlmfc\lib\mfcs90ud.lib: 
 
 
      由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
      由此可以看出,默认情况下,先链接了CRT库MSVCRTD.lib,然后链接的是MFC的库mfcs90ud.lib,因此,需要强制改变一下它们的链接顺序。
-     选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib  问题即可解决。
+     选择“项目 -> 属性 -> 链接器 -> 输入”栏,在其中的“忽略特定的库”这一栏输入:MSVCRTD.lib mfcs90ud.lib, 然后,在“附加库”这一栏中输入: mfcs90ud.lib MSVCRTD.lib  问题即可解决。
+
+
+
+
+
+
+【错误信息】
+protobuf默认VS编译出来的是dll动态库,而本项目中WxAdoInterface本身也是dll,WxAdoInterface调用protobuf,WxAdoInterface由WxService调用。
+整个项目编译期间没有出任何问题,运行时报错:std::call_once被调用二次,导致google::protobuf::FatalException。
+
+
+【分析原因】:
+std::call_once被调用二次,说明有函数被执行二次,导致google::protobuf::FatalException。
+可能原因是:WxService调用了一次protobuf初始化环境,而WxService再次调用WxAdoInterface又被初始化了一次。
+
+【解决方法】:
+将protobuf由dll改成lib方式链接.
+
+
+
+
+
+
+
+
+