Сбой компоновщика Visual C ++ (VS2008 SP1) - PullRequest
3 голосов
/ 01 июня 2011

Следующий фрагмент кода, используемый для генерации простых чисел, компилируется и запускается, как и ожидалось, при запуске отладки, но всегда кажется, что происходит сбой inker при сборке в режиме Release:

#include <vector>
#include <algorithm>
#include <cstdlib>
#include <iostream>

template<typename T> class PrimeGen {
    struct Elim {
        T p ;
        T e ;
    } ;

    class Elim_cmp {
    public:
        bool operator()(const Elim& e1, const Elim& e2) { return e1.e > e2.e; }
    } ;

    std::vector<Elim> elim_heap ;
    T last ;

public:
    PrimeGen() {
        Elim e0 = { 2, 4 } ;
        elim_heap.reserve(1024) ;
        elim_heap.push_back(e0) ;
        last = 2 ;
    }

    T next() {
        T n = last ;
        bool prime;
        do {
            n ++ ;
            prime = true ;
            while(n == elim_heap.front().e) {
                if(prime) prime = false ;
                std::pop_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
                Elim& elim = elim_heap.back() ;
                elim.e = elim.p + n ;
                std::push_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
            }
        } while(!prime) ;
        Elim e = { n, 2*n } ;
        elim_heap.push_back( e ) ;
        std::push_heap(elim_heap.begin(), elim_heap.end(), Elim_cmp()) ;
        return last = n ;
    }
} ;

int main()
{
    using namespace std ;
    PrimeGen<unsigned int> pgen ;
    for(int i=0; i<100; i++) {
        cout << pgen.next() << endl ;
    }
    system("pause") ;
}

Кто-нибудь может понять, почему это происходит? Или я сталкивался с одним из тех редких случаев, когда виноват не компилятор, а компилятор?

Я получаю следующую ошибку:

error PRJ0002 : Error result -1073741819 returned from 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe'.

Если бы кто-то еще, работающий с Visual Studio, потратил бы время на сборку кода в режиме выпуска (я удалил все внешние зависимости, так что это просто c & p), я был бы очень признателен.

ОБНОВЛЕНИЕ : При дальнейшем рассмотрении мне кажется, что mt.exe продолжает зависать для меня в режиме выпуска даже для простого кода «Hello World», поэтому при установке должна возникнуть проблема. Я собираюсь переустановить все, что, надо надеяться, исправит это. Модераторы, не стесняйтесь закрывать этот вопрос.

1 Ответ

0 голосов
/ 01 июня 2011

Некоторая программа, например антивирусная программа, сканирует файл.exe одновременно с попыткой компоновщика встроить файл манифеста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...