Article View: pl.comp.objects
Article #15795Re: Kompilacja warunkowa C++ pod VS2005
From: Tomasz Bywalec
Date: Wed, 28 Feb 2007 10:34
Date: Wed, 28 Feb 2007 10:34
39 lines
2709 bytes
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-mailReferences:
<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