Article View: ee.prog
Article #71Re: GCC 3 ja libstdc++.so
From: Rene Prillop
Date: Fri, 08 Nov 2002 11:35
Date: Fri, 08 Nov 2002 11:35
117 lines
5044 bytes
5044 bytes
Toomas Kiisk wrote:
> On Thu, 7 Nov 2002, Rene Prillop wrote:
> No tore siis, aga sellega o nyyd na"htavasti lo~pp.
> Kuni ta"naseni ei oleks mina vist kyll uneski osanud sellise asja
> peale tulla, et yritada C++ koodi C kompilaatoriga kompileerida ... oh
> ajad, majad jmt. Erinevad keeled ju, linkimise tasandil isegi ysna
> po~hjalikult erinevad. Nagu siga ja ka"gu.
>
Mina t�mbaks pigem paralleele g++ ja m�ne teise kompilaatori "force c++
compilation" lipukesega.
g++ v�ttis juba 2.x puhul libstdc++.so k�lge ning selle kasutamine on
seet�ttu minu vaatenurgast t�iesti m�ttetu.
Hetkel ei meenu mulle mitte �htki kompilaatoripaketti, mis n�uaks
kasutajalt erineva kompilaatori seadmist c ja cpp failidele.
Igatahes veetsin natuke produktiivset aega gcc 3 seltsis ja all on
lyhike programm, mis probleemi reprob.
------------------------------------------------
gcc3test.cpp:
#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <stdlib.h>
class CTest{
public:
CTest(char *lpszText){
m_lpszText=(char *)malloc(strlen(lpszText)+1);
strcpy(m_lpszText, lpszText);
}
~CTest() {
free(m_lpszText);
}
protected:
char *m_lpszText;
};
extern "C" int GCC3Fun(){
// Comment next line out to get rid of seg fault...
static const CTest Test("1234");
printf("In GCC3Fun\n");
return 0;
}
#if defined (MAIN)
int main(int argc, char *argv[])
{
int (*pGCC3Fun)();
try{
throw 1;
}catch(...){
printf("Catch OK\n");
}
if (argc>1){
printf("Step 1\n");
void *pDynLib=dlopen("./libgcc3test.so", RTLD_LAZY);
printf("Step 2\n");
pGCC3Fun=(int (*)())dlsym(pDynLib, "GCC3Fun");
printf("Step 3\n");
(*pGCC3Fun)();
printf("Step 4\n");
dlclose(pDynLib);
printf("Step 5\n");
}
else{
printf("Step 1\n");
pGCC3Fun=GCC3Fun;
(*pGCC3Fun)();
printf("Step 2\n");
}
return 0;
}
#endif
------------------------------------------------
Makefile:
CC=g++
FLAGS=-O3
all:
$(CC) $(FLAGS) -shared -o libgcc3test.so gcc3test.cpp
$(CC) $(FLAGS) -DMAIN -o gcc3test.bin gcc3test.cpp -ldl
------------------------------------------------
Output:
[prr@localhost c]$ make
g++ -O3 -shared -o libgcc3test.so gcc3test.cpp
g++ -O3 -DMAIN -o gcc3test.bin gcc3test.cpp -ldl
[prr@localhost c]$ ./gcc3test.bin
Step 1
In GCC3Fun
Step 2
[prr@localhost c]$ ./gcc3test.bin x
Step 1
Step 2
Step 3
In GCC3Fun
Step 4
Step 5
Segmentation fault
[prr@localhost c]$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Configured with: ../gcc-3.2/configure
Thread model: posix
gcc version 3.2
------------------------------------------------
Masinaks oli RedHat 7.3.
Suures testimistuhinas proovisin sama koodi yhel RH 8 masinal, kus
crashi ei tekkinud. Samal masinal funkas ka gcc nii nagu enne, st oskas
cpp koodi normaalselt kompileerida. Ainult et libstdc++ tuleb erinevalt
varasemast k�lge linkida.
Niiet v�imalik, et tegelt on s��dlane hoopist�kkis RH73, ehk �igemini
inime, kes selle kehvasti konfind on.
PRR
Technical Details
Message-ID:
<3DCBA17B.6080506@tac.ee>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-06!sn-xit-04!supernews.com!newsfeed.gamma.ru!Gamma.RU!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed1.ulv.nextra.no!nextra.com!uio.no!newsfeed1.funet.fi!newsfeeds.funet.fi!newsfeed.uninet.ee!news.ut.ee!not-for-mailReferences:
<3DC905E8.4030707@tac.ee> <Pine.GSO.4.44.0211062136300.26245-100000@math.ut.ee> <Pine.WNT.4.44.0211071145470.428-100000@viluvere.itsise> <3DCA4542.6020408@tac.ee> <Pine.GSO.4.44.0211071635320.26526-100000@math.ut.ee> <3DCA8832.7060205@tac.ee> <Pine.GSO.4.44.0211071957140.17785-100000@math.ut.ee>Show Full Headers
Complete Article Headers
X-Google-Language: ESTONIAN,CP1257 X-Google-Thread: 1063a5,9e9f472a45e0a698 X-Google-Attributes: gid1063a5,public X-Google-Thread: f8b3f,9e9f472a45e0a698 X-Google-Attributes: gidf8b3f,public X-Google-ArrivalTime: 2002-11-08 03:44:06 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-06!sn-xit-04!supernews.com!newsfeed.gamma.ru!Gamma.RU!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed1.ulv.nextra.no!nextra.com!uio.no!newsfeed1.funet.fi!newsfeeds.funet.fi!newsfeed.uninet.ee!news.ut.ee!not-for-mail From: Rene Prillop <prr@tac.ee> Newsgroups: ee.prog,ee.arvutid.unix Subject: Re: GCC 3 ja libstdc++.so Date: Fri, 08 Nov 2002 13:35:23 +0200 Lines: 118 Distribution: Estonia Message-ID: <3DCBA17B.6080506@tac.ee> References: <3DC905E8.4030707@tac.ee> <Pine.GSO.4.44.0211062136300.26245-100000@math.ut.ee> <Pine.WNT.4.44.0211071145470.428-100000@viluvere.itsise> <3DCA4542.6020408@tac.ee> <Pine.GSO.4.44.0211071635320.26526-100000@math.ut.ee> <3DCA8832.7060205@tac.ee> <Pine.GSO.4.44.0211071957140.17785-100000@math.ut.ee> NNTP-Posting-Host: tln-yksik-paastekomp-gw.estpak.ee Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 8bit X-Trace: kadri.ut.ee 1036755382 23235 194.126.102.178 (8 Nov 2002 11:36:22 GMT) X-Complaints-To: usenet@kadri.ut.ee NNTP-Posting-Date: Fri, 8 Nov 2002 11:36:22 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.1) Gecko/20020826 X-Accept-Language: en-us, en