2012-08-17 29 views
7

GCC 4.5 thêm hỗ trợ cho các dấu phẩy động thập phân trong thư viện thời gian chạy (http://gcc.gnu.org/gcc-4.5/changes.html). Tôi có thể biên dịch mã bao gồm, bằng cách sử dụng không gian tên std :: decimal, sau đó sử dụng decimal64 và như vậy trong mã.Làm thế nào để sử dụng dấu chấm thập phân trong Gnu C++ (g ++)?

Thật không may, tôi thiếu một số thư viện để liên kết mã. Tôi đã không thể tìm ra thư viện nào nên được yêu cầu. Hỗ trợ DFP được bật trong gcc (--enable-decimal-float = dpd)

Ngoài ra, nên có cách nào nhanh chóng cung cấp chữ số thập phân trong mã không? Bằng cách nhanh chóng, tôi có nghĩa là người dùng được xác định literals được xử lý bởi các mẫu và dịch tại thời gian biên dịch. Tôi không muốn cung cấp đôi được chuyển đổi tại thời gian chạy (mặc dù hiệu suất và thực tế là tôi thực sự không thể đứng đánh giá di chuyển từ thời gian biên dịch đến thời gian chạy vẫn còn làm tròn các vấn đề ...). Tôi đã tìm thấy hậu tố "df" nhưng điều đó dường như không được công nhận bởi trình biên dịch.

Tôi đang sử dụng phiên bản gcc 4.7.1 trên mục tiêu powerpc-ibm-aix7.1.0.0.

Linker thông báo lỗi:

ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsitd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_mulsd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_muldd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_multd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatditd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsditd 

TIA.

+0

Hậu tố chữ cho '_Decimal64' là' dd' ('df' là dành cho' _Decimal32'), nhưng điều đó không giải thích trình biên dịch không nhận ra sau (không kể đến các thói quen DPD). Bạn đã thử truyền '--enable-version-specific-runtime-libs' vào trình biên dịch chưa? –

+0

Bạn có thực sự muốn chuyển tùy chọn đó tới trình biên dịch không? Nó không được công nhận. "g ++ -v" cho thấy bản thân trình biên dịch được cấu hình với tùy chọn được đề cập. – user1034081

Trả lời

1

Gần đây tôi đã biên dịch gcc4.7.1 từ nguồn và gặp sự cố với biểu tượng thiếu __floatunsidf. Điều này hóa ra là một biểu tượng được yêu cầu bởi libstdC++ và được định nghĩa trong libgcc_s.so. Cho rằng cả hai thư viện được cung cấp bởi gcc họ nên tương thích. Trong trường hợp của tôi, tôi vẫn còn có một mối liên kết bao gồm một phiên bản cũ của libgcc_s mà tôi đã nâng lên từ nền tảng đích của mình. Nó có thể đáng làm

# to find out where libstdc++.so is: 
gcc -print-file-name=libstdc++.so 

# see if it references the symbol you're missing 
readelf -a "path to libstdc++.so" | grep "symbol name" 

và sau đó làm tương tự cho libgcc_s để xem liệu cả hai đều xác định biểu tượng bạn đang thiếu. Nb một sẽ đánh dấu các biểu tượng như undefined - thats như thế nào mối liên kết biết yêu cầu của nó.

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