Результат компиляции - пустота?

Модератор: Модераторы разделов

PAFOS
Сообщения: 13
ОС: Ubuntu 9.10

Результат компиляции - пустота?

Сообщение PAFOS »

Приветствую. Короч беда такая.

Есть два класса MAP и SET (пародии на std::map и std::list ). Они шаблонные

Помимо этих классов есть еще куча. Все собирается в статическую либу.

Вот процесс компиляции и сборки либы:

Код: Выделить всё

make: Вход в каталог `/home/markeshov/EvolutionServerRev2/src/Packets'
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o packet.o packet.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o header.o header.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o dataiterator.o dataiterator.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o moving.o moving.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o controlmoving.o controlmoving.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o updateobject.o updateobject.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o objectinfo.o objectinfo.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o getvisiblelist.o getvisiblelist.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o object.o object.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o set.o set.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o map.o map.cpp
g++ -c -pipe -g -fPIC -Wall -W -D_REENTRANT -D_32 -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4 -I../../include -I. -o variant.o variant.cpp
rm -f libPackets.a
ar cqs libPackets.a packet.o header.o dataiterator.o moving.o controlmoving.o updateobject.o objectinfo.o getvisiblelist.o object.o set.o map.o variant.o
rm -f ../../bin/libPackets.a
mv -f libPackets.a ../../bin/
make: Выход из каталога `/home/markeshov/EvolutionServerRev2/src/Packets'


Все норм... потом, когда пытаюсь использовать библиотеку в исполняемом файле, то появляются неразрешимые ссылки на объект MAP и SET.

делаю objdump либы (опустил ненужное):

Код: Выделить всё

set.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*    00000000 set.cpp
00000000 l    d  .text    00000000 .text
00000000 l    d  .data    00000000 .data
00000000 l    d  .bss    00000000 .bss
00000000 l    d  .debug_abbrev    00000000 .debug_abbrev
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .debug_str    00000000 .debug_str
00000000 l    d  .note.GNU-stack    00000000 .note.GNU-stack
00000000 l    d  .comment    00000000 .comment



map.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*    00000000 map.cpp
00000000 l    d  .text    00000000 .text
00000000 l    d  .data    00000000 .data
00000000 l    d  .bss    00000000 .bss
00000000 l    d  .debug_abbrev    00000000 .debug_abbrev
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .note.GNU-stack    00000000 .note.GNU-stack
00000000 l    d  .comment    00000000 .comment


т.е. ваще... только отладочная информация.. а где MAP и SET??

так же есть другой класс, который использует шаблоны dataiterator, там все нормально!

Код: Выделить всё

g++ --version
g++ (Ubuntu 4.4.1-4ubuntu8) 4.4.1


Первый раз с таким сталкиваюсь... че за ?)
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Результат компиляции - пустота?

Сообщение Crazy »

А должно быть что то другое?

Desipere in loco
Спасибо сказали:
PAFOS
Сообщения: 13
ОС: Ubuntu 9.10

Re: Результат компиляции - пустота?

Сообщение PAFOS »

А как же? Где линковщику взять код MAP?

вот док-во:

в файле main.cpp сделал инклуд map.cpp, т.е. там реализация всех методов.

Результат - работает и в main.o сразу появилась инфа о MAP

Код: Выделить всё

00000000  w    F .text._ZN3MAPIc7VARIANTEC1Ev    00000022 _ZN3MAPIc7VARIANTEC1Ev
00000000         *UND*    00000000 _ZN12DataIterator5beginEP10SByteArrayb
00000000         *UND*    00000000 _ZN12DataIteratorlsIiEERS_RKT_
00000000         *UND*    00000000 _ZN12DataIterator3endEv
00000000         *UND*    00000000 _ZN7VARIANT8setValueEPKc
00000000  w    F .text._ZN3MAPIc7VARIANTE6insertERcRS0_    00000121 _ZN3MAPIc7VARIANTE6insertERcRS0_
00000000  w    F .text._ZN3MAPIc7VARIANTE5valueERc    00000084 _ZN3MAPIc7VARIANTE5valueERc
00000000         *UND*    00000000 _ZN7VARIANT5toIntEv
00000000         *UND*    00000000 _ZSt4cout
00000000         *UND*    00000000 _ZNSolsEi
00000000         *UND*    00000000 _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
00000000         *UND*    00000000 _ZNSolsEPFRSoS_E
00000000  w    F .text._ZN3MAPIc7VARIANTED1Ev    0000003e _ZN3MAPIc7VARIANTED1Ev
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Результат компиляции - пустота?

Сообщение Crazy »

PAFOS писал(а):
19.01.2010 21:04
А как же? Где линковщику взять код MAP?

А как компилятору сгенерировать этот код? Если ничего неизвестно о типах.

Desipere in loco
Спасибо сказали:
PAFOS
Сообщения: 13
ОС: Ubuntu 9.10

Re: Результат компиляции - пустота?

Сообщение PAFOS »

О типа неизвестно, но об операциях над ними известно, да и тем более - как он справляется с другими шаблонными функциями и классами?
Спасибо сказали:
PAFOS
Сообщения: 13
ОС: Ubuntu 9.10

Re: Результат компиляции - пустота?

Сообщение PAFOS »

Нашел выход...

в map.h

Код: Выделить всё

#ifndef MAP_H
#define MAP_H

class MAP
{
.....
};

#include "map.cpp"

#endif


Получается при инклуде map.h автоматом инклудится и срр, и код собирается уже в исполняемом... кешна не лучший вариант. но все-таки вариант ;)
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Результат компиляции - пустота?

Сообщение Crazy »

Спецификатор export?

Desipere in loco
Спасибо сказали:
PAFOS
Сообщения: 13
ОС: Ubuntu 9.10

Re: Результат компиляции - пустота?

Сообщение PAFOS »

Не, export не использовал...
Спасибо сказали: