🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15796

Re: Kompilacja warunkowa C++ pod VS2005

#15796
From: Mariusz Lotko
Date: Wed, 28 Feb 2007 19:31
41 lines
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-mail
References: <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