cuốn sách gpt4 ai đã làm

c++ - 带有 gmp 的代码块,带有 << 运算符和 mp*_class 的段错误

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 12:03:14 26 4
mua khóa gpt4 Nike

Tôi đang sử dụng CodeBlocks với gcc 4.7.2 và gmp 5.0.5 trên máy Win 7 64. Sau khi bắt đầu sử dụng gmpxx, tôi thấy một segfault kỳ lạ không xuất hiện với các toán tử như +, -, v.v., nhưng << khi cố gắng tính toán các biến mp*_class. Tôi phải nói rằng gmpxx cho đến nay vẫn hoạt động rất tốt, ngoại trừ điều này.

Ví dụ:

#include 
#include

using namespace std;

int main()
{
mpz_class c = 21;
cout << c << endl;
}

đưa ra một segfault trên dòng cout, trong khi đoạn mã sau hoạt động tốt:

#include 
#include

using namespace std;

int main()
{
mpz_class a = 3, b = 8, c;
c = a + b;
cout << c.get_str() << endl;
}

Thậm chí xa lạ hơn là mã này:

#include 
#include

using namespace std;

int main()
{
mpz_class a = 3, b = 8, c, d = 21;
c = a + b;
cout << c.get_str() << endl;
cout << d << endl;
}

Không phải lúc chạySegfaults nhưng chỉ hiển thị kết quả đầu tiên (11) rồi thoát bình thường. Mặt khác, khi gỡ lỗi, nó có các lỗi phân biệt: cout << d << endl.

Tôi đã tìm kiếm trên Google trong vài ngày qua nhưng không tìm thấy gì liên quan đến 一些 Các toán tử quá tải không hoạt động cho những thứ như vậy.

Tôi sẽ biết ơn bất kỳ lời giải thích.

Tôi đã liên kết hai thư viện gmp trong khối mã như thế này: Cài đặt->Trình biên dịch và Trình gỡ lỗi->Cài đặt trình biên dịch chung->Cài đặt trình liên kết nơi tôi đã thêm: C:\mingw\lib\libgmpxx.dll a và C:\mingw\lib\. libgmp.dll.a (theo thứ tự đó).

Không cần gì khác để biên dịch mã c++ bằng gmpxx.

Cuối cùng, nhật ký xây dựng CodeBlocks của tôi trông như thế này:

g++.exe -pg -g -pg -g -c "C:\Temp\test.cpp" -o .objs\test.o

g++.exe -o test.exe .objs\test.o -pg -lgmon -pg -lgmon C:\mingw\lib\libgmpxx.dll.a C:\mingw\lib\libgmp.dll.a

Tôi thực sự không biết tại sao lại có hai công tắc cho mỗi cái.

Nếu bạn cần thêm thông tin, tôi sẽ sẵn lòng cung cấp nó. Cảm ơn.

câu trả lời hay nhất

Được rồi, đã đến lúc đánh dấu điều này là đã trả lời. Vấn đề là tôi đã cài đặt gmp thông qua mingw-get và hầu như mọi nơi trên googleland đều tuyên bố hãy tự xây dựng nó cho hệ thống của riêng bạn. Một sai lầm ngớ ngẩn, nhờ nhận xét của @ Lol4t0, giờ nó đã hoạt động tốt. Vì vậy, đối với tất cả những người mới như tôi:

1) Cài đặt MinGW với MSYS

2) Tải xuống nguồn gmp và giải nén vào một số thư mục trong mingw\msys\1.0\home\

3) mở shell mingw và điều hướng đến thư mục gmp

4) ./configure --enable-cxx --prefix=/home/newgmpinstall

5) thực hiện

6) thực hiện cài đặt

7) kiểm tra

Nếu kiểm tra OK thì trong newgmpinstall bạn sẽ tìm thấy các tiêu đề gmp.h và gmpxx.h cũng như các thư viện libgmp.a và libgmpxx.a cho hệ thống của bạn.

Bạn có thể di chuyển chúng sang các thư mục mới nếu cần. Sau đó, trong thuộc tính dự án IDE của bạn, hãy thêm tệp *.a vào thư viện được liên kết của bạn và thêm thư mục chứa tệp *.h vào thư mục tìm kiếm trình biên dịch.

viết mã

LƯU Ý: Ban đầu ./configure thoát với lỗi về thiếu M4 do tôi thiếu gói M4. Chỉ cần tải xuống mã nguồn cho M4 và thực hiện các bước trên trên M4 trước, sau đó cài đặt gmp.

Về c++ - khối mã với gmp, segfault với toán tử << và mp*_class, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/13276292/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress