Tôi đang sử dụng trình biên dịch Wind River 4 (gcc (C) và g ++ (C++)) và nó biên dịch tất cả các dự án của tôi mà không gặp bất kỳ sự cố nào. Bây giờ tôi phải sử dụng Coverity Static Analysis để kiểm tra mã của tôi. Tôi đã cấu hình các trình biên dịch cụ thể. Đối với C-Mã (gcc) không có vấn đề và tôi có thể chạy các phân tích, nhưng đối với C++ - Mã số (g ++) Tôi có rất nhiều lỗi:Làm cách nào để có được phân tích tĩnh Coverity tương thích với chuẩn C++ 0x?
.../c++config.h", line 214: error #40:
expected an identifier
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #326:
inline specifier allowed on function declarations only
inline namespace __gnu_cxx_ldbl128 { }
^
.../c++config.h", line 214: error #65:
expected a ";"
inline namespace __gnu_cxx_ldbl128 { }
^
.../include/string.h", line 76: error #312:
cannot overload functions distinguished by return type alone
extern __const void *memchr (__const void *__s, int __c, size_t __n)
^
.../include/string.h", line 116: error #312:
cannot overload functions distinguished by return type alone
extern "C++" __const void *memchr (__const void *__s, int __c, size_t __n)
^
Nó dường như là một số C++ 11 tính năng cụ thể như không gian tên nội tuyến nhưng mã không sử dụng các tính năng này. Các lỗi trên được sản xuất với một HelloWorld-Code:
#include "stdio.h"
#include "util.h"
#include <string>
#include "string.h"
using namespace std;
int main()
{
printf("Hello World, C++ version: %d.%d.%d\r\n",__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__);
return 0;
}
Tôi đã cố gắng để thiết lập các tiêu chuẩn C++ với các tùy chọn g ++
-std=c++98
nhưng kết quả không thay đổi.
Các Test-Mã là một xây dựng hệ thống phân cấp lớn nhưng các bước cho Coverity là như thế này:
- mục tiêu và env bộ (Wind River 4 Linux)
- làm sạch
- cov-configure với trình biên dịch dir và loại
- cov-xây dựng với đúng "làm tất cả" lệnh mà làm việc một mình
- cov-phân tích
- if (no_error) cov-comm it-khuyết tật
Tôi cũng đã cấu hình Coverity để thay thế tất cả "không gian tên nội tuyến" với "không gian tên" trong cov-build (--ppp-translator replace/inline namespace/namespace
). Các lỗi nội tuyến biến mất nhưng nó tạo ra nhiều lỗi quá tải này và không xây dựng thành công. Cũng cố gắng để loại bỏ "C + +" theo cùng một cách nhưng không làm việc luôn có nhiều lỗi hơn.
Có ai có ý tưởng về vấn đề ở đây không? Và làm thế nào tôi có thể có được Coverity xây dựng mà không có lỗi? Có lẽ tôi có thể cấu hình Coverity để bỏ qua tiêu đề tiêu chuẩn C++ nhưng bây giờ tôi không làm thế nào?
Bạn đang sử dụng phiên bản gcc nào? 4 không đủ cụ thể. Dù sao, bạn nên mở một trường hợp với [email protected] - gửi cho họ nhật ký xây dựng và nguồn tiền xử lý của bạn và họ sẽ có thể cho bạn biết bạn cần thêm gì vào cấu hình của mình để cho phép cov-emit xử lý thành công nó. –
WindRiver Env. là WR-Linux-4.0/Toolchain-4.4-291 và gcc được sử dụng có vẻ là phiên bản 4.4.1. Đó là phiên bản của thư mục bao gồm gcc trong quá trình tạo tập lệnh. Tôi bây giờ cũng liên lạc với sự hỗ trợ: Vấn đề là đặc biệt là trình biên dịch WindRiver không được hỗ trợ trong Linux, nhưng hầu như * bất kỳ trình biên dịch * gcc nào. Bây giờ họ đã có nguồn tiền xử lý và kiểm tra nó. Ngoài ra hỗ trợ WindRiver bây giờ là tham gia. – Indimental
Đã trả lời từ Coverity Support và chúng tôi hiện đang cố gắng giải quyết sự cố. – Indimental