Проблемы с PC-LINT и gcc 4.8 / STL (на Ubuntu)

Для проекта мы переключили проект с Windows на Linux, и хотя PC-LINT прекрасно работает с Wine, я не могу запустить PC-LINT с помощью простой тестовой программы. PC-LINT всегда жалуется на заголовки STL. Я просмотрел всю документацию Gimpel о gcc, и я использую co-gcc.h, и я сгенерировал lint_cppmac.h, size-options.lnt и gcc-include-path.lnt - мы используем PC-LINT версии 9.00k, и я попытался также с 9.00к4. gcc - это версия 4.8.2 в Ubuntu 14.04 LTS.

Итак, вот что я делаю:

lint-nt.sh -voip +b std.lnt /home/test/test.cpp

lint-nt.sh - это просто вспомогательный скрипт для запуска PC-LINT под Linux с Wine и для преобразования вывода (то есть с обратной косой черты в косую черту...) и содержит следующее:

#!/bin/bash
DIR=`dirname $0`
# Options that are passed to PC-Lint before any other options.
# -fff: Under Linux, filenames are case-sensitive.
# +rw(__is_pod): __is_pod is a GCC toolchain-specific keyword.
PREOPTS="-fff +rw(__is_pod)"
wine ${DIR}/LINT-NT.EXE $PREOPTS "$@" | tr '\\\r' '/ ' 

test.cpp содержит следующее:

#include <iostream>

class Base {
public:
  Base(int i) : m_i(i), m_pi(new int[i]) { }
  ~Base() {}
  int get() { std::cout << m_i << std::endl; return m_i; }
private:
  int m_i;
  int *m_pi;
};

std.lnt просто содержит следующее (файлы по умолчанию из gimpel)

co-gcc.lnt        // gcc compiler options
lib-stl.lnt       // STL

Поэтому при запуске я получаю эту ошибку (фрагмент)

/home/test/test.cpp  11  Info 783: Line does not end with new-line 
                         _ 
  Base(int i) : m_i(i), m_pi(new int[i]) { } 
/home/test/test.cpp  5  Info 1732: new in constructor for class 'Base' which 
    has no assignment operator 
/home/test/test.cpp  5  Info 1733: new in constructor for class 'Base' which 
    has no copy constructor 
/home/test/test.cpp  5  Info 737: Loss of sign in promotion from int to 
    unsigned int 
           _ 
  ~Base() {} 
/home/test/test.cpp  6  Warning 1540: Pointer member 'Base::m_pi' (line 10) 
    neither freed nor zeroed by destructor 
/home/test/test.cpp  10  Info 830: Location cited in prior message 
                        _ 
  int get() { std::cout << m_i << std::endl; return m_i; } 
/home/test/test.cpp  7  Error 40: Undeclared identifier 'cout' 
/home/test/test.cpp  7  Info 701: Shift left of signed quantity (int) 
/home/test/test.cpp  7  Error 40: Undeclared identifier 'endl' 
/home/test/test.cpp  7  Warning 504: Unusual shift operation (left side unparenthesized) 
/home/test/test.cpp  7  Info 701: Shift left of signed quantity (int) 
/home/test/test.cpp  7  Warning 522: Highest operation, operator '<<', lacks side-effects 
/home/test/test.cpp  7  Info 1762: Member function 'Base::get(void)' could be made const 
_ 
}; 
/home/test/test.cpp  11  Info 1712: default constructor not defined for class 
    'Base' 

--- Wrap-up for Module: /home/tall/test.cpp 

Info 753: local class 'Base' (line 3, file /home/tall/test.cpp) not referenced 
 /home/test/test.cpp  3  Info 830: Location cited in prior message 
Info 766: Header file '/usr/include/c++/4.8/iostream' not used in module '/home/test/test.cpp' 

Я пытался с использованием пространства имен STD и без. Я пробовал тестовые файлы с <string> и это становится еще хуже.

Я ценю каждый намек, чтобы это сработало. заранее спасибо

0 ответов

Другие вопросы по тегам