[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gcc



On 2004.03.11 at 10:22:49 +0300, Andrey Kiselev wrote:

> On Wed, Mar 10, 2004 at 01:03:41PM +0300, Dmitry Skorinko wrote:
> > >> а для каких версий gcc требуется перекомпиляция? Ну то есть есть у
> > >> меня объектный файл, компильнутый допустим в Gcc 3.2.0.... его к
> > >> объектам 2.95.3 прилинковать то прилинкуешь, только работать ниче не
> > >> будет.
> > AK> Во-первых, это имеет значение только в случае C++. Во-вторых, ты
> > AK> получишь ошибку на этапе линковки, а не во время исполнения.
> > 
> > Ну вот прям щас взял и слинковал 2 объекта, скомпилированных в 3.2.2 с
> > одним, скомпилированным в 2.95.4 ..
> > типа тиго: ld -r a3.o b3.o c2.o -o d.o - нормально все..
> 
> $ cat a.cpp 

> extern int test();
> 
> int main ()
> {
>     return test();
> }
> 
> $ cat b.cpp 
> int test()
> {
>     return 0;
> }
> 
> $ g++-2.95 a.cpp -c -o a.o
> $ g++-3.3 b.cpp -c -o b.o
> $ g++-3.3 a.o b.o -o c.exe
> a.o(.text+0x7): In function `main':
> : undefined reference to `test(void)'
> collect2: ld returned 1 exit status
> $ g++-3.3 a.cpp -c -o a.o
> $ g++-3.3 a.o b.o -o c.exe

Это же C++. С++ не совместимо. А объяви ты эту фунцию test  в обоих
файлах как extern "C", или просто переименуй файлы в *.c - проблем не
будет. 



Reply to: