首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未解决的-当将Qt应用程序链接到Google霹雳when时出现符号错误

未解决的-当将Qt应用程序链接到Google霹雳when时出现符号错误
EN

Stack Overflow用户
提问于 2010-12-22 23:30:01
回答 1查看 2K关注 0票数 4

我试图静态地将我的Qt应用程序链接到Windows下的Google,但我总是收到未解决的符号错误。我使用的是qmake和VC++2008,我的项目文件似乎有一些问题。如果链接器忽略了我的LIBS规范,因为我得到了错误,不管我是否将库添加到LIBS中。

我用以下方法编写了“早餐”:

代码语言:javascript
复制
vcbuild /platform:Win32

Google在src\processor\test_app.cc中包括一个例子。如果我按建议编译它,一切都会很好:

代码语言:javascript
复制
C:\test>cl /Zi test_app.cc /Fetest_app.exe /I C:\google-breakpad\src C:\google-breakpad\src\client\windows\Release\lib\exception_handler.lib C:\google-breakpad\src\client\windows\Release\lib\crash_generation_client.lib C:\google-breakpad\src\client\windows\Release\lib\common.lib

但是,如果我试图使用类似的.pro文件使用qmake构建它,就会得到相同的未解决符号错误。这是我使用的.pro文件:

代码语言:javascript
复制
TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
INCLUDEPATH += C:/google-breakpad/src
SOURCES += test_app.cc

LIBS += C:/google-breakpad/src/client/windows/Release/lib/exception_handler.lib
LIBS += C:/google-breakpad/src/client/windows/Release/lib/crash_generation_client.lib
LIBS += C:/google-breakpad/src/client/windows/Release/lib/common.lib
PRE_TARGETDEPS += C:/google-breakpad/src/client/windows/Release/lib/exception_handler.lib
PRE_TARGETDEPS += C:/google-breakpad/src/client/windows/Release/lib/crash_generation_client.lib
PRE_TARGETDEPS += C:/google-breakpad/src/client/windows/Release/lib/common.lib

建造它:

代码语言:javascript
复制
C:\test>qmake -config release

C:\test>nmake

Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

        "C:\Program files\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe" -
f Makefile.Release

Microsoft (R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl -c -nologo -Zm200 -Zc:wchar_t- -O2 -MD -GR -EHsc -W3 -w34100 -w34189
-DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQ
T_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAV
E_SSE2 -DQT_THREAD_SUPPORT -I"..\Qt\4.7.1\include\QtCore" -I"..\Qt\4.7.1\include
\QtGui" -I"..\Qt\4.7.1\include" -I"." -I"..\google-breakpad\src" -I"..\Qt\4.7.1\
include\ActiveQt" -I"release" -I"..\Qt\4.7.1\mkspecs\win32-msvc2008" -Forelease\
 @C:\Windows\Temp\nm94.tmp
test_app.cc
.\test_app.cc(43) : warning C4100: 'assertion' : unreferenced formal parameter
.\test_app.cc(42) : warning C4100: 'exinfo' : unreferenced formal parameter
.\test_app.cc(42) : warning C4100: 'context' : unreferenced formal parameter
.\test_app.cc(41) : warning C4100: 'dump_path' : unreferenced formal parameter
.\test_app.cc(62) : warning C4100: 'argv' : unreferenced formal parameter
.\test_app.cc(62) : warning C4100: 'argc' : unreferenced formal parameter
        link /LIBPATH:"c:\Qt\4.7.1\lib" /NOLOGO /INCREMENTAL:NO /MANIFEST /MANIF
ESTFILE:"release\test.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPEND
ENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' pub
licKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:rele
ase\test.exe @C:\Windows\Temp\nm95.tmp
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; us
e /NODEFAULTLIB:library
test_app.obj : error LNK2019: unresolved external symbol "public: __thiscall goo
gle_breakpad::ExceptionHandler::ExceptionHandler(class std::basic_string<unsigne
d short,struct std::char_traits<unsigned short>,class std::allocator<unsigned sh
ort> > const &,bool (__cdecl*)(void *,struct _EXCEPTION_POINTERS *,struct MDRawA
ssertionInfo *),bool (__cdecl*)(unsigned short const *,unsigned short const *,vo
id *,struct _EXCEPTION_POINTERS *,struct MDRawAssertionInfo *,bool),void *,int)"
 (??0ExceptionHandler@google_breakpad@@QAE@ABV?$basic_string@GU?$char_traits@G@s
td@@V?$allocator@G@2@@std@@P6A_NPAXPAU_EXCEPTION_POINTERS@@PAUMDRawAssertionInfo
@@@ZP6A_NPBG5123_N@Z1H@Z) referenced in function _main
release\test.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"C:\Program files\Microsoft Visual Studio 9.0\VC\BIN
\link.EXE"' : return code '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program files\Microsoft Visual Studio 9.0\VC\BIN
\nmake.exe"' : return code '0x2'
Stop.

我在.pro文件中遗漏了什么?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-02-10 14:46:36

问题是Google库是用“将wchar_t视为内置类型”(/Zc:wchar_t)编译的。Qt编译时禁用该选项(/Zc:wchar_t-)。这意味着在编译时,一切都匹配:std::wstring是用unsigned short定义的,这正是Qt所期望的。但是在链接时,Breakpad库已经用__wchar_t (或wchar_t)定义了__wchar_t。结果是链接器无法解析对其函数的调用,因为参数类型不匹配(在链接时)。

解决办法是:

  • 禁用Google打断盘库中的“将wchar_t视为内置类型”(配置属性> C/C++ >语言)。(这就是我们正在尝试的.)
  • 在Qt中启用该选项(删除/Zc:wchar_t-)

有关详细信息,请参阅:

  • T是本机类型)

(这个问题很微妙,让我们在一天中的大部分时间里陷入困境。)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4514660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档