🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15795

Re: Kompilacja warunkowa C++ pod VS2005

#15795
From: Tomasz Bywalec
Date: Wed, 28 Feb 2007 10:34
39 lines
2709 bytes
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.
> 
> Czy tak jest? Jak moge zrobic by to dzialalo ok..
> 
> Pozdr
> Marcin 
> 
> 

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).

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. Jeżeli dobrze 
kojarzę, tak potrafią robić "sprytniejsze" linkery - inne albo dołączają 
cały plik obiektowy albo nie dołączają go wogóle. Jeżeli w danym pliku 
masz zdefiniowaną tylko jedną funkcję to OK, ale jeśli jest ich tam 
kilka to linker dołączy je wszystkie nawet jeśli korzystasz tylko z 
jednej. Ale muszę *podkreślić* że nie jestem tego do końca pewien.

Innym rozwiązaniem mogłoby być zrobienie jakiegoś pliku konfiguracyjnego 
(np. config.h) i umieszczenie w nim wszystkich #define'ów niezbędnych do 
skonfigurowania programu. Nagłówek ten include'owałbyś w odpowiednich 
plikach nagłówkowych i źródłowych.

Pozdrawiam,
Tomek Bywalec
Technical Details
Message-ID: <es3lr1$i6j$1@polsl.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.pl!not-for-mail
References: <es0n65$n7s$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!polsl.pl!not-for-mail
From: Tomasz Bywalec <t_bywalec@do.not.spam.o2.pl>
Newsgroups: pl.comp.objects
Subject: Re: Kompilacja warunkowa C++ pod VS2005
Date: Wed, 28 Feb 2007 11:34:07 +0100
Organization: Politechnika Slaska, Gliwice
Lines: 39
Message-ID: <es3lr1$i6j$1@polsl.pl>
References: <es0n65$n7s$1@news.onet.pl>
NNTP-Posting-Host: pc169-133.ondraszek.ds.polsl.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1172658849 18643 157.158.169.133 (28 Feb 2007 10:34:09 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Wed, 28 Feb 2007 10:34:09 +0000 (UTC)
User-Agent: Thunderbird 1.5.0.9 (Windows/20061207)
In-Reply-To: <es0n65$n7s$1@news.onet.pl>
X-Antivirus: avast! (VPS 000718-0, 2007-02-27), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit