Article View: pl.comp.objects
Article #5031Re: Inicjalizacja obiektów globalnych w bibliotekach dynamicznych
From: Michal Mosiewicz
Date: Fri, 05 Mar 1999 03:39
Date: Fri, 05 Mar 1999 03:39
47 lines
2643 bytes
2643 bytes
Piotr Piatkowski wrote:
> [...]
> Przypominam, że przy linkowaniu statycznym wszystko działa poprawnie.
> Z tego co mi mówił znajomy, jeżeli zastosować w takim przypadku
> zmienną typu wbudowanego (np. char *) to inicjalizacja działa poprawnie
> także w wypadku umieszczenia kodu w *.so.
Hmmm... zrobiłem mały test (podaje tylko najwazniejsze kawalki):
//biblioteka.h
class aaa {
public:
static QString bb;
};
//biblioteka.cpp
#include "biblioteka.h"
QString aaa::bb("Test")
//main.cpp
#include "biblioteka.h"
int main() {
cout << aaa::bb;
}
No i wychodzi, ze jest dobrze. Pojawia się Test. Sprawdziłem, że jest
dobrze zarówno na gcc-2.8.1 jak i pgcc 2.91.59 (egcs 1.1). Zresztą
jeszcze na 2.7.x.x pamiętam, że też takie rzeczy też robiłem i nie
miałem żadnych problemów.
Natomiast z konstruktorami to IMHO jest tak, że wszystkie konstruktory
statyczne są wywoływane wewnątrz funkcji _init biblioteki. Normalnie
linker powinien ją wywołać podczas linkowania programu zanim biblioteka
będzie użyta po raz pierwszy. Być może problem jest zupełnie inny...
może coś się wali przy konstrukcji zupełnie innych statycznych pól i
skutkiem tego część danych pozostaje niezainicjowana. Jedną z możliwych
przyczyn mogłoby być np. mieszanie bibliotek c++ skompilowanych zwykłym
gcc i egcsem (choć akurat w tym prostym przypadku to nie zaszkodziło).
Zresztą - przetestuj powyższe. Może po prostu masz jakiś walnięty
linker.
Michał
--
WWW: http://www.lodz.pdi.net/~mimo tel: Int. Acc. Code + 48 42 2148340
add: Michal Mosiewicz * Bugaj 66 m.54 * 95-200 Pabianice * POLAND
Technical Details
Message-ID:
<36DF51F2.B84CE552@interdata.com.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.task.gda.pl!mimo.lodz.pdi.net!not-for-mailReferences:
<7blnec$qo8$1@druid.ceti.com.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.task.gda.pl!mimo.lodz.pdi.net!not-for-mail From: Michal Mosiewicz <mimo@interdata.com.pl> Newsgroups: pl.comp.objects Subject: Re: Inicjalizacja obiektów globalnych w bibliotekach dynamicznych Date: Fri, 05 Mar 1999 04:39:30 +0100 Organization: Interdata s.c., http://www.interdata.com.pl Lines: 47 Message-ID: <36DF51F2.B84CE552@interdata.com.pl> References: <7blnec$qo8$1@druid.ceti.com.pl> NNTP-Posting-Host: mimo.lodz.pdi.net Mime-Version: 1.0 X-Trace: korweta.task.gda.pl 920605252 1190 195.116.162.218 (5 Mar 1999 03:40:52 GMT) X-Complaints-To: abuse@task.gda.pl NNTP-Posting-Date: 5 Mar 1999 03:40:52 GMT X-Mailer: Mozilla 4.5 [en] (X11; I; Linux 2.2.1 i586) X-Accept-Language: pl,en-US,en Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit