Russian Qt Forum
Август 17, 2018, 13:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибки линковки  (Прочитано 452 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10110


Просмотр профиля
« : Август 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
Новичок

Offline Offline

Сообщений: 29


Просмотр профиля
« Ответ #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 Offline

Сообщений: 10110


Просмотр профиля
« Ответ #2 : Август 14, 2018, 06:44 »

Спасибо за интересные линки. Проблему решил натравив на cpp файл "родной" компилятор (т.е. тот которым собирался Qt), так все бычит. Видимо др решения нет. Досадно, всегда думал что "все одним компилятором" - глупость только на бздошном Вындоуз  Плачущий
Записан
zhbr
Новичок

Offline Offline

Сообщений: 29


Просмотр профиля
« Ответ #3 : Август 14, 2018, 07:08 »

name mangling у разных компиляторов разный ага. именно поэтому библиотеки для C++ в бинарном виде распространяются под конкретный компилятор. c чистым C проще.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10110


Просмотр профиля
« Ответ #4 : Август 14, 2018, 08:01 »

name mangling у разных компиляторов разный ага. именно поэтому библиотеки для C++ в бинарном виде распространяются под конкретный компилятор. c чистым C проще.
Да, но тот же QOpenGLWindow имеет массу др используемых методов, их линкер почему-то нашел
Записан
zhbr
Новичок

Offline Offline

Сообщений: 29


Просмотр профиля
« Ответ #5 : Август 14, 2018, 08:17 »

остальные имена видимо случайно совпали Улыбающийся
а что за компиляторы - "родной" и другой? знаю точно, что msvc разных версий по-разному коверкает имена.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2577


Просмотр профиля
« Ответ #6 : Август 14, 2018, 15:48 »

Судя по тулзе nm он вооще на маке. Обожаю темы от Igors, ни ОС ни компилятор, ни версии оного, нихрена, а вы извольте ответить на вопрос.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10110


Просмотр профиля
« Ответ #7 : Август 15, 2018, 06:44 »

остальные имена видимо случайно совпали Улыбающийся
а что за компиляторы - "родной" и другой? знаю точно, что msvc разных версий по-разному коверкает имена.
Родной clang, текущий - icc. Ну с MSVC все однозначно, "только один", всякий раз приходится пересобирать кучу либ

Судя по тулзе nm он вооще на маке. Обожаю темы от Igors, ни ОС ни компилятор, ни версии оного, нихрена, а вы извольте ответить на вопрос.
А что изменится если будет больше инфы/подробностей? Да ровным счетом ничего, суть та же.

Т.е. выходит компилятор, увидев описание внешнего класса или ф-ций, сам придумывает "mangled" имена а потом ищет их в либе. Поэтому если имена не совпали - с приветом. Верно ли я понимаю ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2577


Просмотр профиля
« Ответ #8 : Август 15, 2018, 13:49 »

А что изменится если будет больше инфы/подробностей? Да ровным счетом ничего, суть та же.


Вам сразу ответят, что не надо миксовать компиляторы и\или стандартную библиотеку.
Программа, собранная шлангом не должна работать с либой, собранной гцц. Или либа, собранная с libc++ не должна работать с программой, собранной с stdlib.
Я вам даже больше скажу, что либа, собранная с gcc4.7 не работает с либой собранной 4.8, ибо менялось ABI.

А в исходной постановке задачи - сорян, телепаты в отпуске, откуда нам знать, что вы на маке собираете через icc. Я его вот в глаза не видел. Он же платный, да?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10110


Просмотр профиля
« Ответ #9 : Август 16, 2018, 07:43 »

..откуда нам знать, что вы на маке собираете через icc. Я его вот в глаза не видел. Он же платный, да?
Да. Но причем тут "видел не видел" - интересно как вообще действовать в такой ситуации, установить причину, сделать выводы. А перетыкивать компиляторы/сборки - такое решение никуда не убежит, да и годится не всегда.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.058 секунд. Запросов: 22.