Russian Qt Forum
Март 29, 2024, 15:26
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
>
Ошибки линковки
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Ошибки линковки (Прочитано 5518 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Ошибки линковки
«
:
Август 10, 2018, 15:15 »
Добрый день
Линкер выдал такую бяку
Код:
Undefined symbols for architecture x86_64:
"__ZThn36_NK13QOpenGLWindow10redirectedEP6QPoint", referenced from
"__ZThn36_NK13QOpenGLWindow6metricEN12QPaintDevice17PaintDeviceMetricE", referenced from
"__ZThn36_NK18QPaintDeviceWindow11paintEngineEv", referenced from
Посмотрел либу GUI утилитой nm
Код:
000000000009a720 T __ZNK13QOpenGLWindow10redirectedEP6QPoint
000000000009a7a0 T __ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
Чебуреки... Чебоксары.. а Чебурашки (_ZThn36) нет. Для 2 др ошибок аналогично. Не долго думая пересобрал qtbase - эффект нулевой, никаких ошибок сборки не было. Ну конечно либа GUI юзается вовсю, но ошибки только эти. Ну и шо делать?
Спасибо
Записан
zhbr
Гость
Re: Ошибки линковки
«
Ответ #1 :
Август 13, 2018, 15:22 »
согласно
https://demangler.com/
строки:
Код:
__ZThn36_NK13QOpenGLWindow10redirectedEP6QPoint
и
Код:
__ZThn40_NK13QOpenGLWindow10redirectedEP6QPoint
переводятся как
Код:
_non-virtual thunk to QOpenGLWindow::redirected(QPoint*) const
пойдя
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling-special-thunks
, находим:
Код:
use a "Th" prefix and encode the required adjustment offset, probably negative, indicated by a 'n' prefix, and the encoding of the target function.
получается какое-то несоответствие смещения
может какая-то нестыковка архитектур?
а есть командная строка линкера? может там пути к либам не туда указывают?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Ошибки линковки
«
Ответ #2 :
Август 14, 2018, 06:44 »
Спасибо за интересные линки. Проблему решил натравив на cpp файл "родной" компилятор (т.е. тот которым собирался Qt), так все бычит. Видимо др решения нет. Досадно, всегда думал что "все одним компилятором" - глупость только на бздошном Вындоуз
Записан
zhbr
Гость
Re: Ошибки линковки
«
Ответ #3 :
Август 14, 2018, 07:08 »
name mangling у разных компиляторов разный ага. именно поэтому библиотеки для C++ в бинарном виде распространяются под конкретный компилятор. c чистым C проще.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Ошибки линковки
«
Ответ #4 :
Август 14, 2018, 08:01 »
Цитата: zhbr от Август 14, 2018, 07:08
name mangling у разных компиляторов разный ага. именно поэтому библиотеки для C++ в бинарном виде распространяются под конкретный компилятор. c чистым C проще.
Да, но тот же QOpenGLWindow имеет массу др используемых методов, их линкер почему-то нашел
Записан
zhbr
Гость
Re: Ошибки линковки
«
Ответ #5 :
Август 14, 2018, 08:17 »
остальные имена видимо случайно совпали
а что за компиляторы - "родной" и другой? знаю точно, что msvc разных версий по-разному коверкает имена.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Ошибки линковки
«
Ответ #6 :
Август 14, 2018, 15:48 »
Судя по тулзе nm он вооще на маке. Обожаю темы от Igors, ни ОС ни компилятор, ни версии оного, нихрена, а вы извольте ответить на вопрос.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Ошибки линковки
«
Ответ #7 :
Август 15, 2018, 06:44 »
Цитата: zhbr от Август 14, 2018, 08:17
остальные имена видимо случайно совпали
а что за компиляторы - "родной" и другой? знаю точно, что msvc разных версий по-разному коверкает имена.
Родной clang, текущий - icc. Ну с MSVC все однозначно, "только один", всякий раз приходится пересобирать кучу либ
Цитата: Авварон от Август 14, 2018, 15:48
Судя по тулзе nm он вооще на маке. Обожаю темы от Igors, ни ОС ни компилятор, ни версии оного, нихрена, а вы извольте ответить на вопрос.
А что изменится если будет больше инфы/подробностей? Да ровным счетом ничего, суть та же.
Т.е. выходит компилятор, увидев описание внешнего класса или ф-ций, сам придумывает "mangled" имена а потом ищет их в либе. Поэтому если имена не совпали - с приветом. Верно ли я понимаю ?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: Ошибки линковки
«
Ответ #8 :
Август 15, 2018, 13:49 »
Цитата: Igors от Август 15, 2018, 06:44
А что изменится если будет больше инфы/подробностей? Да ровным счетом ничего, суть та же.
Вам сразу ответят, что не надо миксовать компиляторы и\или стандартную библиотеку.
Программа, собранная шлангом не должна работать с либой, собранной гцц. Или либа, собранная с libc++ не должна работать с программой, собранной с stdlib.
Я вам даже больше скажу, что либа, собранная с gcc4.7 не работает с либой собранной 4.8, ибо менялось ABI.
А в исходной постановке задачи - сорян, телепаты в отпуске, откуда нам знать, что вы на маке собираете через icc. Я его вот в глаза не видел. Он же платный, да?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Ошибки линковки
«
Ответ #9 :
Август 16, 2018, 07:43 »
Цитата: Авварон от Август 15, 2018, 13:49
..откуда нам знать, что вы на маке собираете через icc. Я его вот в глаза не видел. Он же платный, да?
Да. Но причем тут "видел не видел" - интересно как вообще действовать в такой ситуации, установить причину, сделать выводы. А перетыкивать компиляторы/сборки - такое решение никуда не убежит, да и годится не всегда.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...