2012-02-10 16 views
5

Mam plik źródłowy, który mogę wstępnie przetworzyć przy użyciu opcji -E i -P (używając GCC 4.1.2 dla platformy osadzonej na platformie vxWorks). Wszystkie pozostałe opcje są takie same, jak podczas kompilowania pliku. Dostępne są następujące opcje:Kompilowanie wcześniej przetworzonych zmian plików wyjściowych

-Wall 
-march=pentium 
-nostdinc 
-O0 
-fno-builtin 
-fno-defer-pop 
-g 
-c 
-o 

oraz wszystkie ścieżki dołączania. Teraz, gdy skompiluję ten wstępnie przetworzony plik, wynikowy plik obiektowy jest znacznie mniejszy (około 30%) niż podczas bezpośredniego kompilowania oryginału. A kiedy łączę program, linker narzeka na brakujące symbole (wszystkie w kodzie użytkownika), co znowu nie zdarza się przy korzystaniu z oryginalnego pliku źródłowego. Dlaczego istnieje różnica? Czy jest jakiś sposób, aby to zadziałało?

Odpowiedz

1

Na pewno nie brakuje Ci -D definiuje z wiersza poleceń? Twój wynik byłby zgodny z częściami, które nie zostały skompilowane z powodu warunków warunkowych.

Inną możliwością (ponieważ nie określa się konkretnie nazwy kompilatora) jest to, że używasz generycznego gcc -E, a nie specyficznego dla łuku kompilatora krzyżowego dla twojego środowiska vxWorks. Cross-gcc predefiniuje niektóre zmienne, które będą potrzebne dla gcc -E.

+0

Modyfikuję regułę, która tworzy plik obiektowy, po prostu dodając flagę '-E'- i' -P', bez usuwania czegokolwiek, więc jestem prawie pewien, że używam poprawnego kompilatora i mam wszystkie definiuje. –

1

Podczas kompilowania wstępnie przetworzonego wyjścia spróbuj podać opcję -fpreprocessed, aby powiadomić GCC, aby ponownie nie przetworzyć ponownie.

Jedyna różnica, jaką mogę sobie wyobrazić to makra, które powodują rozszerzenie do identyfikatora, który jest nazwą makra, która została już rozszerzona - preprocesor przestaje w tym momencie rozwijać, ale jeśli ponownie uruchomiono preprocesor, identyfikator byłby ponownie rozwinięty. Spodziewałbym się, że wszelkie wystąpienia tego prawdopodobnie powodują błąd kompilatora, ale kto wie?

Powiązane problemy