2013-08-23 24 views
7

Tôi đang sử dụng máy Linux x86_64 để xây dựng chương trình của mình. Tôi đã liên kết thư viện được chia sẻ với tệp thực thi. Trong dự án của tôi, tôi đang gọi một hàm đã khai báo vector<string> bên trong hàm. Chương trình của tôi bị giết khi hàm đó được gọi. Khi gỡ lỗi thông qua GDB dưới đây là đầu ra tôi nhận được.Tín hiệu nhận được chương trình SIGILL, Hướng dẫn bất hợp pháp

Program received signal SIGILL, Illegal instruction. 
0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87 
87    : _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0) 
(gdb) bt 
0 0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87 

Đây có phải là vấn đề biên soạn thư viện được chia sẻ của tôi không ?? Đâm đầu đủ vào nó. Hãy giúp tôi.

-Chaks

Thêm biết thêm cho các truy vấn của bạn: Vâng, chức năng mà tôi đang kêu gọi File_ToText là một hàm ảo trong lớp OC_Catalog_c. Biến thành viên của lớp khác có đối tượng của lớp OC_Catalog_c cũng có chức năng ảo File_ToText.Using đối tượng mà tôi đang gọi hàm File_ToText của OC_Catlog_c từ hàm File_ToText ảo. Tôi sẽ hiển thị một đoạn mã:

class Oc_Catalog_c 
{ 
    virtual vector<string> File_ToText    (void) const; 
} 

class B 
{ 
    const OC_Catalog_c*   m_pCatalog; 
    virtual vector<string> File_ToText    (void) const; 
} 

vector<string> B::File_ToText(void) const 
{ 
    vector<string> a_SubData; 
    a_SubData = m_pCatalog->File_ToText(); 
} 
+0

Vui lòng bắt đầu dán đoạn trích để bắt đầu và tìm hiểu thêm về thư viện. – lpapp

+0

Bạn sử dụng tùy chọn nào khi biên dịch bằng g ++? Bạn cũng đang xây dựng thư viện được chia sẻ hoặc bạn có nhận được nó ở một nơi khác không? – idfah

+0

Nó cũng có thể hữu ích để biết bạn đang chạy bộ xử lý nào và bản phân phối và phiên bản Linux nào bạn đang sử dụng. – cordoro

Trả lời

9

Cảm ơn các bạn đã giúp đỡ. Cuối cùng tôi đã tìm ra vấn đề đã gây ra lỗi này.
Gỡ lỗi nhiều hơn và theo dõi hướng dẫn tôi thấy chương trình không thành công tại hướng dẫn ud2a.
Tôi đã bỏ qua một cảnh báo "cảnh báo: không thể chuyển đối tượng không thuộc loại POD 'struct sqlrw_request_cb' đến '...'; cuộc gọi sẽ bị hủy bỏ khi chạy".
Giải quyết các cảnh báo này đã khắc phục được sự cố của tôi liên quan đến SIGILL.
Giải thích khác về liên kết này: ud2a instruction causing SIGILL

+0

Cảm ơn bạn đã liên kết. Đã lưu chúng tôi rất nhiều thời gian. – naab

Các vấn đề liên quan