Re: Ошибка линковки при портировании с Solaris на Linux
От: balder  
Дата: 07.08.03 13:35
Оценка:
Проблема оказалась не в описаниях классов, а в сборке библиотеки.
При последовательности:
1. Компилируются .o файлы c такими ключами:
 g++296 -fPIC -g <I... I... > -c -o foo1.so.o foo1.C
 g++296 -fPIC -g <I... I... > -c -o foo2.so.o foo2.C
 ... 
 g++296 -fPIC -g <I... I... > -c -o foon.so.o foon.C

2. Из скомпилированных файлов собирается библиотека libutil.so:
 g++296 -shared -o libutil.so foo1.so.o foo2.so.o ... foon.so.o

3. Из скомпилированного объектника линкуется исполняемый файл с использованием билиотеки libutil.so
 g++296 -fPIC -g template.so.o version.so.o -L<путь до каталога с libutil.so> -lutil -o template

template.so.o содержит ссылки на методы классов, определенных в объектниках собранных на шаге 1.
По идее эти ссылки должны разрешиться, так как все объектники собраны в библиотеке libutil.so.
Но вылетают ошибки undefined reference

Если же сделать так:
1. Компилируются .o файлы c такими ключами:
 g++296 -fPIC -g <I... I... > -c -o foo1.so.o foo1.C
 g++296 -fPIC -g <I... I... > -c -o foo2.so.o foo2.C
 ... 
 g++296 -fPIC -g <I... I... > -c -o foon.so.o foon.C

2. Линкуем template.so.o вместе с скомпилированными на первом шаге объектниками, не собирая libutil
 g++296 -fPIC temlate.so.o version.so.o foo1.so.o foo2.so.o ... foon.so.o -o template

В этом случае все линкуется нормально.
То есть проблема в сборке библиотеки libutil, может я какие ключи пропустил?
(если собрать libutil без ключа -shared, то ошибки теже)
Подскажите в чем проблема ????
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.