2016-04-02 26 views
3

Sadece OS X'de (10.11.3 (15D21)) wxWidgets kullanarak bir irc istemci projesi başlattım. Bununla birlikte, kodu derlediğimde ve çalıştırdığımda, herhangi bir nedenle hataları parçalara ayırıyor. Programı gdb ile çalıştırdım ve çıktıyı aldım.wxWidgets programı seg faulting

Program received signal SIGSEGV, Segmentation fault. 
0x00007fff9793871a in std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)() from /usr/lib/libstdc++.6.dylib 

Kodum yüzden ben bu sorunu yaşıyorum neden emin değilim uzakta merhaba dünya öğreticisindeki WxWidgets web sitesinde dolaştı olmamıştır. Gdb çıktısına dayanarak, sorun, std::string::assign() ile ilgili gibi görünüyor. Bu çizgiyi aşağıya çektiğini görebileceğim tek yer, başlığın geçtiği wxFrame inşası mı?

main.hpp

#ifndef __main_hpp 
#define __main_hpp 

#include <sockit.hpp> 
#include <wx/wxprec.h> 

#ifndef WX_PRECOMP 
    #include <wx/wx.h> 
#endif 

#include "frame.hpp" 

class IrcClientApp : public wxApp { 
public: 
    virtual bool OnInit(); 
}; 

#endif 

main.cpp

#include "main.hpp" 

wxIMPLEMENT_APP(IrcClientApp); 

bool IrcClientApp::OnInit() { 
    IrcClientFrame* frame = new IrcClientFrame("IRC client", wxPoint(100, 100), wxSize(600, 400)); 
    frame->Show(true); 
    return true; 
} 

frame.hpp

#ifndef __frame_hpp 
#define __frame_hpp 

class IrcClientFrame : public wxFrame { 
private: 
    void about(wxCommandEvent&); 
    void exit(wxCommandEvent&); 

    wxDECLARE_EVENT_TABLE(); 

public: 
    IrcClientFrame(const wxString&, const wxPoint&, const wxSize&); 
}; 

#endif 

frame.cpp

#include "main.hpp" 

wxBEGIN_EVENT_TABLE(IrcClientFrame, wxFrame) 
    EVT_MENU(wxID_ABOUT, IrcClientFrame::about) 
wxEND_EVENT_TABLE() 

IrcClientFrame::IrcClientFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : 
    wxFrame(NULL, wxID_ANY, title, pos, size) { 

    // About menu item 
    wxMenu* menu_about = new wxMenu; 
    menu_about->Append(wxID_ABOUT); 

    // Menu bar 
    wxMenuBar* menu_bar = new wxMenuBar; 
    menu_bar->Append(menu_about, "&Help"); 

    // Set it 
    SetMenuBar(menu_bar); 

    CreateStatusBar(); 
    SetStatusText("This is the status text!"); 
} 

void IrcClientFrame::about(wxCommandEvent& e) { 
    wxMessageBox("Hello world", "Hello world", wxOK | wxICON_INFORMATION); 
} 

void IrcClientFrame::exit(wxCommandEvent& e) { 
    Close(true); 
} 

Sen -std=c++11 ile kütüphane inşa etmedi ama kendi kodu için bunu kullanıyor

Exception Type:  EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes:  KERN_INVALID_ADDRESS at 0x0000000000000001 
Exception Note:  EXC_CORPSE_NOTIFY 

VM Regions Near 0x1: 
--> 
    __TEXT     0000000103d8d000-0000000103d93000 [ 24K] r-x/rwx SM=COW /Users/USER/* 

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 libstdc++.6.dylib    0x00007fff9793871a std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) + 26 
1 libwx_osx_cocoau_core-3.1.dylib 0x00000001041bcfbf wxNonOwnedWindow::Create(wxWindow*, int, wxPoint const&, wxSize const&, long, wxString const&) + 63 
2 libwx_osx_cocoau_core-3.1.dylib 0x00000001041c1311 wxTopLevelWindowMac::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) + 49 
3 client       0x0000000103d912ec wxFrame::wxFrame(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxString const&) + 140 (frame.h:35) 
4 client       0x0000000103d90d2f IrcClientFrame::IrcClientFrame(wxString const&, wxPoint const&, wxSize const&) + 175 (frame.cpp:8) 
5 client       0x0000000103d9111d IrcClientFrame::IrcClientFrame(wxString const&, wxPoint const&, wxSize const&) + 45 (frame.cpp:23) 
6 client       0x0000000103d8e9b6 IrcClientApp::OnInit() + 134 (main.cpp:6) 
7 libwx_osx_cocoau_core-3.1.dylib 0x00000001041b755e wxApp::CallOnInit() + 158 
8 libwx_baseu-3.1.dylib   0x00000001048623f9 wxEntry(int&, wchar_t**) + 121 
9 client       0x0000000103d8e8a6 main + 38 (main.cpp:3) 
10 libdyld.dylib     0x00007fff9740a5ad start + 1 
+0

Nasıl derlediniz? –

+0

Merhaba @MarkSetchell, düzenleme başlığına bakın, – th3v0id

+0

'u derlemek için Makefile im'i ekledim "homebrew" ile wxWidgets'ı yüklediniz mi? –

cevap

3

kazasında raporundan gönderme kuyruğu aşağıdaki Makefile'a İşte

CC=g++ 
WXCONFIG=$(shell ../../../deps/bin/wx-config --cxxflags --libs) 
INCLUDES=-I../../../src 
CFLAGS=-g -std=c++11 -Wall -Wno-inconsistent-missing-override $(INCLUDES) 
LDFLAGS=-L../../../deps/lib 
BIN=../bin/client 
CPPS=main.cpp frame.cpp 

all: mkdir_bin examples 

examples: $(CPPS) 
    $(CC) $(CFLAGS) $(WXCONFIG) $(CPPS) -o $(BIN) 

mkdir_bin: ; if [ ! -d ../bin ]; then mkdir ../bin; fi 
clean:  ; if [ -d ../bin ]; then rm -rf ../bin; fi 

oluyor kullanarak Derleyen, bu muhtemelen sorun. OS X altında önerilen yaklaşım -std=c++11 -stdlib=libc++ kütüphanesini ve kendi kodunuzu derlemek için -std=c++11 -stdlib=libc++'u kullanmaktır, yani eski derleme dizininizi kaldırın (ayrı bir dizinde oluşturdunuz, değil mi?), Daha sonra CXXFLAGS="-std=c++11 -stdlib=libc++" ile yapılandırın ve Yapmak. Son olarak, -stdlib=libc++'u kullanmak için kendi makefile dosyanızı güncelleyin.

+1

çalışır, teşekkürler – th3v0id