2011-08-24 35 views
7

Tôi đang cố gắng biên dịch chương trình c theo mingw gcc. Chương trình này đang sử dụng số nguyên __uint128_t. Khi tôi cố gắng biên dịch nó dưới gcc chuẩn ubuntu trên cùng một máy 64 bit, nó hoàn toàn hoạt động. Nhưng sau đó, khi tôi cố gắng biên dịch nó cho các cửa sổ dưới mingw, nó chỉ đơn giản là thậm chí không nhận ra từ khóa __uint128_t. Điều đó có nghĩa là gì? Không có 128 bit số nguyên dưới mingw? Nếu không, có bất kỳ ngôn ngữ lập trình nào cho các cửa sổ có số nguyên 128 bit gốc (và nhanh) không?__uint128_t trên mingw gcc

+0

Thực hiện 'gcc -dM -E - jww

Trả lời

5

Bạn cần

  • một phiên bản tương đối gần đây của gcc
  • một phiên bản được biên soạn với sự hỗ trợ bản địa 64 bit số nguyên

__int128_t sau đó được mô phỏng bằng cách sử dụng cặp int64_t trong cùng một cách như Số nguyên 64 bit được mô phỏng với 32 bit nếu chúng không có sẵn trên biên dịch 32 bit

5

Tôi đã có thể nhận được cùng một vấn đề bằng cách sử dụng Code :: Blocks và mặc định mingw cài đặt (đó là IA32 btw), tuy nhiên, khi tôi cài đặt TDM-MinGW64, nó biên dịch tốt (sau khi thêm trình biên dịch x64 để C :: B). Vì vậy, hãy đảm bảo rằng bản dựng mingw của bạn nhắm mục tiêu x64 (với -m64) nó là một bản dựng x64 của mingw, dưới dạng __uint128_t là một phần mở rộng tùy chọn ABI x64.

bất kỳ cửa sổ IDE nào bạn đang sử dụng sẽ không nhận __int128_t làm từ khóa, vì đây là phần mở rộng GCC đặc biệt (như đã đề cập).

0

Nhưng sau đó, khi tôi cố gắng biên dịch nó cho cửa sổ dưới mingw, nó chỉ đơn giản là không nhận ra từ khóa __uint128_t. Điều đó có nghĩa là gì? Không có 128 bit số nguyên dưới mingw?

Thực hiện gcc -dM -E - < /dev/null | grep INT128. Nếu nó xuất ra macro #define __SIZEOF_INT128__ 16, thì __uint128_t có sẵn. Nếu nó không xuất ra macro hoặc nhỏ hơn 16, thì __uint128_t không khả dụng.

Cũng xem 128-bit integer - nonsensical documentation? trên danh sách gửi thư của người dùng GCC.

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