🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #5031

Re: Inicjalizacja obiektów globalnych w bibliotekach dynamicznych

#5031
From: Michal Mosiewicz
Date: Fri, 05 Mar 1999 03:39
47 lines
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-mail
References: <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