Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

ошибка линковки (linux, g++)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> ошибка линковки (linux, g++)
Имя
Сообщение << Старые топики   Новые топики >>
ошибка линковки (linux, g++) - 2009-05-01 22:20:18.423333   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
добрый день. вобщем, есть следующая проблема.
имеется некая библиотека граф интерфейса, на основе другой библиотеки (SDL). Данный проект был написан под винды как динамическая библиотека. Встала проблема переписать его под линух. После некоторых мучений с причесанием кода под g++, наконец то получил объектные модули. Далее командой "ar" собрал свою либу (пока статическую), передав ей все объектные файлы (сразу скажу их много, 30 штук, т.е 30 cpp файлов). Все успешно собралось, и я обрадованный начал писать тестовое приложение. Скомпилилось оно тоже без ошибок. При линковани передавал все записимые либы. И получаю ошибку следующего содержания:
libMYLib.a(rapplication.o): In function `Application::setScreen(SDL_Surface*)': application.cpp:(.text+0x22b4): undefined reference to `ColorManager::BlendingMapPtr::BlendingMapPtr()' где libMYLib.a - моя собранная либа. на самом деле ошибок там больше, но все они сводятся к "ненахождению" линкером функции ColorManager::BlendingMapPtr::BlendingMapPtr(). По логике вещей, она должна быть в моей либе.

весь код я по религиозным соображениям я поместить не могу (да и вряд ли вы будете разбираться в 30 файлах, в каждом по 3000-5000 строк кода). но некоторый всеж выложу.

bool Application::setScreen(SDL_Surface* surface) { m_screen = surface; if (m_screen == 0) return false; m_screenRect = Rect(0, 0, surface-&gt;w, surface-&gt;h); if (pApp) { Widget* wt = firstTopLevelWidget(); while (wt) { wt-&gt;eventScreenChanged(); wt = wt-&gt;nextSiblingWidget(); } ColorManager::instance()-&gt;eventScreenChanged(); } updateScreen(); return true; }
явно, что проблема тут - ColorManager::instance()->eventScreenChanged();
в методе instance происходит создание статического объекта от класса ColorManager и возврат указателя на него (не знаю, зачем так сделано, но что поделать).

BlendingMapPtr это класс, который описан ВНУТРИ класса ColorManager.

вобщем вроде все. есть какие нить соображения/пожелания/советы?
Post #: 1
RE: ошибка линковки (linux, g++) - 2009-05-01 22:32:19.110000   
vvviperrr

Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
блин, вот для чего нужны форумы)))))))))))))))))))))))) я не видел, что это конструктор))) как запостил этот пост, увидел, проверил, и оказывается, что он был описан как inline функция)))) всем спасибо, пост прикройте :)
Post #: 2
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> ошибка линковки (linux, g++)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.