Problem z kompilacją z MSVS 2010 i standardem C++

Próbuję zbudować, używając msvs 2010 projekt znaleziony w następującym git:

Https://github.com/Joonhwan/exprtk

Problem polega na tym, że komentuję linię 48 '# define exprtk_lean_and_mean ' w exprtk.plik hpp, dostaję następujący błąd kompilatora:

Error   1   error C1128: number of sections exceeded object file format limit : compile with /bigobj

Googlowanie błędu, wydaje się wskazywać, że skompilowana Jednostka tłumaczenia skompilowała się do czegoś większego niż limit arbitrażu, a dodanie 'bigobj' do linii poleceń powinno rozwiązać problem (co czyni). Kompilowanie kodu za pomocą gcc (4.3) działa bez żadnych usterek.

Moje pytania to:
  1. Czy c++ nakłada ograniczenie na liczbę typów, które można mieć w jednostce tłumaczeniowej?

  2. Czy sposób ułożenia kodu w tym projekcie jest złą praktyką? (podczas googlowania zauważyłem, że wiele bibliotek boost ma ten sam problem np: Boost.Sprit)

Author: Ismael, 2012-05-14

2 answers

Czy c++ nakłada ograniczenie na liczbę typów, które można mieć w jednostce tłumaczeniowej?

Zauważ, że maksymalne wartości takich parametrów pozostają otwarte dla poszczególnych implementacji. Norma wprowadza jedynie minimalne wymagania, które muszą być poparte wdrożeniem. Implementacja będzie dokumentować maksymalne wartości, które obsługuje i w tym przypadku implementacja MSVC to robi.

Są one zdefiniowane w specjalnej sekcji standardu C++.

Załącznik B-ilości wdrożeniowe

  1. Ponieważ komputery są skończone, implementacje C + + są nieuchronnie ograniczone w wielkości programów mogą pomyślnie przetworzyć. każdy wykonanie dokumentuje te ograniczenia, o ile są znane. to dokumentacja może powoływać się na ustalone limity gdzie istnieją, powiedz jak obliczyć limity zmiennych jako funkcja dostępnych zasobów, lub powiedzieć, że stałe limity nie istnieją lub są nieznane.

  2. Limity mogą ograniczać ilości, które obejmują ilości opisane poniżej lub i inni Liczba za każda ilość jest zalecana jako minimalna dla tej ilości. jednakże, ilości te są tylko wytycznymi i nie określaj zgodności.
    - Poziomy zagnieżdżania wyrażeń złożonych, struktury kontroli iteracji oraz struktury kontroli wyboru [256].
    - Poziomy zagnieżdżania warunkowego włączenie [256].
    - Pointer, array, and deklaratory funkcji (w dowolnym kombinacja) modyfikująca arytmetykę, struktura, związek lub niekompletny Typ w oświadczeniu [256].
    - Zagnieżdżanie poziomy wyrażeń w nawiasach w pełnym wyrazie [256].
    - Liczba znaków w wewnętrznej IDENTYFIKATOR Lub Nazwa makra [1 024].
    - Liczba znaków w zewnętrznym identyfikator [1 024].
    - zewnętrzne identyfikatory w jednej jednostce tłumaczeniowej [65 536].
    - identyfikatory z blokiem zakres zadeklarowany w jednym bloku [1 024].
    - Identyfikatory makr jednocześnie zdefiniowane w jednej jednostce tłumaczeniowej [65 536].
    - parametry w jednej funkcji definicja [256].
    - argumenty w jednym wywołanie funkcji [256].**
    - parametry w jedna definicja makro [256].
    - Argumenty w jednym wywołaniu makra [256].
    - znaki w jednym logicznym linia źródłowa [65 536].
    - znaki w ciąg znaków literalny lub szeroki string literal (po konkatenacja) [65 536].
    - rozmiar obiektu [262 144].
    - poziomy zagnieżdżania dla # include plików [256].
    - etykiety Etui na switch statement (wyłączając te dla dowolne zagnieżdżone polecenia switch) [16 384].
    - DANE w jednym Klasa, struktura lub związek [16 384].
    - Stałe wyliczania w jednym wyliczenia [4 096].
    - poziomy zagnieżdżona Klasa, struktura lub Unia definicje w jednym struct-declaration-list [256].
    - Funkcje zarejestrowane przez atexit()[32].
    - bezpośrednie i pośrednie klasy bazowe [16 384].
    - bezpośrednie klasy bazowe dla a pojedyncza Klasa [1024].
    - Członkowie deklarowane w jednej klasie [4 096].
    - Ostateczne nadpisanie funkcji wirtualnych w Klasa dostępna lub nie [16 384].
    - Bezpośrednie i pośrednie wirtualne bazy klasa [1 024].
    - statyczni członkowie a klasa [1 024].
    - deklaracje przyjaciół w klasie [4 096].
    - Kontrola dostępu deklaracje w klasie [4 096].
    - Inicjalizatory członkowskie w konstruktorze definicja [6 144].
    - zakres Kwalifikacje jednego identyfikatora [256].
    - zagnieżdżone zewnętrzne Dane techniczne [1 024].
    - szablon argumenty w deklaracji szablonu [1 024].
    - rekurencyjnie zagnieżdżony szablon instancje [17].
    - obsługa za spróbuj block [256].
    - rzut specyfikacje dotyczące jednej funkcji deklaracja [256].

 14
Author: Alok Save,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 05:56:19

Ograniczenie znajduje się wewnątrz formatu OBJ używanego przez stare wersje MSVC i odpowiednie łączniki. Tak więc, chociaż ograniczenie to jest dowolne, nie może być wykonane domyślne zachowanie dla nowych wersji kompilatorów. Sprawdź opis opcji / bigobj :

Linkery wysłane przed Visual C++ 2005 nie mogą odczytać .pliki obj, które zostały wyprodukowane za pomocą /bigobj.

 7
Author: Alexei Levenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 18:50:06