Article View: pl.comp.objects
Article #15796Re: Kompilacja warunkowa C++ pod VS2005
From: Mariusz Lotko
Date: Wed, 28 Feb 2007 19:31
Date: Wed, 28 Feb 2007 19:31
41 lines
2386 bytes
2386 bytes
Tomasz Bywalec wrote: > Marcin O. napisał(a): > > > [...] >> >> No i kicha. Mam blad linkera, ze nie widzi definicji funkcji A. Jak >> sztucznie umiescze w pliku a.cpp na poczatku linijke #define _A_ to >> dziala, ale jak usune to nie dziala. Wynika, ze dyrektywa #define _A_ ma >> zasieg "lokalny" i dziala tylko na pliki naglowkowe a nie na pliki >> zrodlowe. Działa na te pliki źródłowe, w których załączono plik nagłówkowy dyrektywą #include. > Dokładnie tak jest - #define musi być widoczny nie tylko podczas > kompilowania plików, w których korzystasz z funkcji A() (wtedy powoduje > to, że pliki te "wiedzą", że dana funkcja istnieje) ale także podczas > kompilowania pliku zawierającego jej definicję (tak, aby kompilator > skompilował tę funkcję i umieścił ją w pliku .o lub .obj). Dokładnie. > W zasadzie wydaje mi się, że możesz usunąć #ifdef'a z pliku źródłowego > funkcji A - tak aby ta funkcja zawsze się kompilowała. Linker chyba sam > rozpozna czy dana funkcja jest rzeczywiście gdzieś używana czy nie i sam > zdecyduje czy dołączyć ją do pliku wykonywalnego czy nie. (...) Linker może robić takie rzeczy, jeśli linkuje .o (lub .obj) do pliku wykonywalnego. W przeciwnym razie (linkowanie do biblioteki .a, .so lub .dll), nie ma gwarancji na poziomie linkowania, że dana funkcja jest nieużywana. Wyjątkiem są te, które w pliku źródłowym (.c lub .cpp) są zaznaczone słówkiem kluczowym static. Wówczas linker wie, że taka funkcja jest używana' tylko w ramach jednego pliku .o lub .obj. -- Mariusz Lotko
Technical Details
Message-ID:
<es4l0f$jg9$1@bandai.magma-net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.magma-net.pl!not-for-mailReferences:
<es0n65$n7s$1@news.onet.pl> <es3lr1$i6j$1@polsl.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.magma-net.pl!not-for-mail From: Mariusz Lotko <imie.nazwisko@wp.pl> Newsgroups: pl.comp.objects Subject: Re: Kompilacja warunkowa C++ pod VS2005 Date: Wed, 28 Feb 2007 20:31:54 +0100 Organization: Magma Systemy Komputerowe Lines: 42 Message-ID: <es4l0f$jg9$1@bandai.magma-net.pl> References: <es0n65$n7s$1@news.onet.pl> <es3lr1$i6j$1@polsl.pl> NNTP-Posting-Host: 192.168.21.22 Mime-Version: 1.0 X-Trace: bandai.magma-net.pl 1172690767 19977 192.168.21.22 (28 Feb 2007 19:26:07 GMT) X-Complaints-To: usenet@news.magma-net.pl NNTP-Posting-Date: Wed, 28 Feb 2007 19:26:07 +0000 (UTC) User-Agent: KNode/0.10.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit