簡體   English   中英

wxWidgets 和 wxPDFDoc 在初始化時崩潰

[英]wxWidgets and wxPDFDoc crash on init

由於我看不到的明顯原因,我在程序初始化時遇到了崩潰。 我的調用棧是:

    1  std::char_traits<wchar_t>::assign          char_traits.h       420  0x5555557691cf 
    2  std::wstring::_M_set_length                basic_string.h      221  0x55555576c865 
    3  std::wstring::_M_assign                    basic_string.tcc    274  0x55555576da33 
    4  std::wstring::assign                       basic_string.h      1370 0x55555576cc1b 
    5  std::wstring::operator=                    basic_string.h      700  0x55555576bb38 
    6  wxString::operator=                        string.h            1892 0x5555557697a5 
    7  wxFileName::Assign                         filename.cpp        405  0x55555616e130 
    8  wxFileName::Assign                         filename.cpp        529  0x55555616e723 
    9  wxFileName::wxFileName                     filename.h          149  0x555555824988 
    10 wxPathList::Add                            filefn.cpp          118  0x555556167e06 
    11 wxPdfFontManagerBase::wxPdfFontManagerBase string.h            3603 0x555555db8a8a 
    12 wxPdfFontManager::wxPdfFontManager         pdffontmanager.cpp  1642 0x555555db8c30 
    13 wxPdfDocumentModule::OnInit                pdffontmanager.cpp  1817 0x555555db8c70 
    14 wxModule::Init                             module.h            33   0x555556193e59 
    15 wxModule::DoInitializeModule               module.cpp          137  0x5555561931b6 
    16 wxModule::InitializeModules                module.cpp          168  0x555556193811 
    17 DoCommonPostInit                           init.cpp            282  0x555556181729 
    18 wxEntryStart                               init.cpp            348  0x555556181ae0 
    19 wxInitialize                               init.cpp            541  0x555556181f76 
    20 wxInitializer::wxInitializer               init.h              92   0x555556182221 
    21 wxEntry                                    init.cpp            474  0x555556181d53 
    22 wxEntry                                    init.cpp            516  0x555556181ebe 
    23 main                                       myprogram.cpp       490  0x555555766ebc 

在這里,__c1 不存在於內部

    static _GLIBCXX17_CONSTEXPR void
    assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
    { __c1 = __c2; }

在使用 wxPdfDoc 代碼之前,其他 wxStrings 被愉快地分配給。 我必須確保 wxPdfDocument 在我的 CMakeLists 中的其他庫之前被鏈接,否則我會得到 Static Initialization Order Fiasco。 _GLOBAL__sub_I_strconv.cpp () from /usr/local/lib/libwx_baseu的“程序接收信號 SIGFPE,算術異常”,其中wxCSConv::DoCreate失敗。 我認為這是在 wxWidgets 初始化之前初始化的 wxpdfdoc 庫中某處的某個 static,但我不知道庫鏈接順序更簡單的解決方法在哪里。

因此,我是這樣target_link_libraries(${PROJECT_NAME} PRIVATE -lpthread -lwxcode_gtk3u_pdfdoc-3.1 ${wxWidgets_LIBRARIES} ${MYSQL_LIBS} -lodbc)的:

我還確保它指向使用我自己的 wxWidgets 樹而不是系統 wxGTK 的東西:

    set(wxWidgets_CONFIG_EXECUTABLE /home/rich/wxWidgets/build-debug/wx-config)
    set(wxWidgets_ROOT_DIR /home/rich/wxWidgets)
    set(wxWidgets_LIB_DIR /home/rich/wxWidgets/build-debug/lib)
    set(wxWidgets_INCLUDE_DIRS /home/rich/wxWidgets/build-debug/lib/wx/include/gtk3-unicode-static-3.1)
    find_package(wxWidgets COMPONENTS core base webview qa adv aui html propgrid ribbon richtext stc xml REQUIRED)
    include(${wxWidgets_USE_FILE})
    link_directories(/home/rich/wxpdfdoc/build-gtk/.libs)

我正在使用 Ubuntu 20.04 並使用 Git 分支,構建我自己的樹版本。 對於我正在使用的 wxWidgets(是的,我知道很多是默認設置,但我很明確):

../configure --disable-shared --enable-unicode --prefix="$(pwd)" --enable-stc --enable-ipc --enable-base64 --enable-exceptions --enable-fontenum --enable-fs_archive --enable-stdpaths --enable-sysoptions --enable-threads --enable-url --enable-aui  --enable-graphics_ctx  --enable-printarch --enable-timer --enable-ribbon --enable-webview --enable-display --enable-splash --enable-snglinst --enable-printfposparam --with-opengl --with-expat=builtin --with-cxx=11 --enable-cxx11 --enable-stl --enable-std_iostreams --enable-std_string --enable-ftp --enable-http --enable-fileproto --enable-sockets --enable-ipv6 --enable-dataobj --enable-ipc --enable-any --enable-arcstream --enable-backtrace --enable-cmdline --enable-datetime --enable-debugreport --enable-dynamicloader --enable-exceptions --enable-ffile --enable-file --enable-filehistory --enable-filesystem --enable-fontmap --enable-fs_inet --enable-fs_zip --enable-fsvolume --enable-fswatcher --enable-geometry --enable-sound --enable-stopwatch --enable-streams --enable-tarstream --enable-textbuf --enable-textfile --enable-variant --enable-zipstream --enable-protocol --enable-protocol-http --enable-protocol-ftp --enable-protocol-file --enable-html --enable-htmlhelp --enable-propgrid --enable-svg --enable-clipboard --enable-dnd --enable-accel --enable-debug --with-libpng=builtin --with-libjpeg=builtin --with-zlib=builtin --with-libtiff=builtin --with-libcurl --with-gtk=3 --with-cxx=17 CXXFLAGS=-std=c++17

對於 wxPDFDoc,我正在使用:

../configure --with-wx-config=/home/rich/wxWidgets/build-debug/wx-config --disable-shared

我完全不知道為什么會發生這種情況 - 任何指示將不勝感激!

您在構建 wxPdfDoc 時似乎沒有指定-std=c++17 ,因此除非您的編譯器默認使用 C++17,否則它不會使用與 wxWidgets 相同的編譯選項,這是災難的根源。 您需要使用完全相同的選項(當然還有相同的編譯器)來構建所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM