LINUX.ORG.RU

[cmake] [мольба] В одном месте не получается использовать конструкторы класса

 


0

1

Граждане, какая-то жесть. Уже много часов тщетно пытаюсь выловить баг.

Суть такова: есть класс. Его хедер в src/soils/soil.h. У него есть конструктор. Так вот этот самый конструктор получается использовать, только если исходник, в котором он используется, лежит в src/ или src/soils.

Почему такое может быть? Все остальные методы используются нормально, а конструктор — ни-ни, ld ругается, мол undefined reference to `qfgui::Soil::Soil(...)'.

Уверен, что что-то накосячил с cmake, но там всё хорошо выглядит. Что не так-то? :(

Может, кто-нибудь на свежую голову найдёт проблему? Вот проект: http://obey.su/qfrost.tar.gz. Проблема в undo/newsoilcommand.cpp, не выходит использовать конструкторы класса Soil.

★★★★★

Я вот не понимаю, почему мне никто не верит? Я уже вроде указал на причину проблемы.

Ну хоть бы проверил, прежде чем говорить, что причина не в перекрестных зависимостях.

Раз тебе лень, давай сделаю эту работу за тебя. Изменим СMakelist.txt в qfrost\src так, чтобы линкер дважды обрабатывал библиотеки с перекрестными ссылками.

set (QFROST_LIBRARIES
     qfrost_core qfrost_control_panel qfrost_computations
     qfrost_undo qfrost_soils qfrost_boundary_conditions  qfrost_tools
     qfrost_tools_panel qfrost_undo qfrost_soils ${QT_LIBRARIES})
...
target_link_libraries(../qfrost ${QFROST_LIBRARIES})

Еще раз обращу внимание на повторение

...qfrost_undo qfrost_soils...qfrost_undo qfrost_soils...

После этого изменения у меня собрался проект, хотя раньше не собирался. В качестве пруфа приведу скриншот с твоим приложением, собранным под оффтопик.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Кстати приложение падает. Я там потыкал мышкой, повыделял области, а потом провел мышкой над не той областью и программа упала.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Там похоже инструмент «boundary condition creator» глючит.

pathfinder ★★★★
()
Ответ на: комментарий от Obey-Kun

Наверняка assert словил какой-то?

И правда:

ASSERT: «segment.length() > QLineF(segment.p1(), closest_point).length()» in file bla-bla-bla\qfrost\src\tools\anchor.cpp, line 508

This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Спасибо, исправлю! А как добился? (если объяснять лень, забей, сам попробую)

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от pathfinder

Ох щит, я свою софтину уже год в винде не видел! А всё лень собирать :). Машины с виндой нету.

А статически можешь собрать?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

А статически можешь собрать?

Ээээээ... Там вроде сам Qt должен быть собран статически, а все остальное без изменений.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Я знаю. Я говорю, а не мог бы ты его для меня собрать статически?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от pathfinder

А вообще забей, в виртуалку винду поставлю и соберу, делов-то.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

хотя добиться того же самого не сумел

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от pathfinder

Так как ты добился такого, не помнишь?

Obey-Kun ★★★★★
() автор топика

> В одном месте не получается использовать конструкторы класса

А их не нужно в одном месте использовать.

anonymous
()
Ответ на: комментарий от pathfinder

между делом, версию по ссылке из топика обновил, и если тебе сложнее объяснить, как добился ассерта, чем снова проделать те же действия, то вперёд

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

а вообще, можешь и не смотреть, ошибки теперь точно не будет. ещё раз спасибо, что поймал её.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от gogi

Хм, понятно, это из-за gcc 4.6... обновил boost.geometry, теперь с 4.6 нормально работает

Obey-Kun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.