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 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.
Tôi là một lập trình viên xuất sắc, rất giỏi!