Constantine
Чсх реактос здорово помогает в плане "как в этой гребаной винде это захакано"
Vladislav
а objdump их показывает?
Anonymous
а другим проектом собирается?
Anonymous
макрос не определен?
ep
3) либа подключается к проге с помощью target_link_libraries
Этот пункт точно выполняется правильно?
target_link_libraries может молча проглотить несуществующие пути и вообще пустые строки
Anonymous
CV_Export
Anonymous
что там?
Anonymous
вбейте в гугл cmake static library видимо распространенный вопрос
Anatoly
Vladislav
гм, магия
Vladislav
а сманглены они одинаково?
Vladislav
тогда cmake с verbose и смотреть, почему он кривые пути компилятору дает
Vladislav
Гм
Vladislav
Погоди, я вроде с чем-то таким сталкивался
Vladislav
Либа у тебя точно с fPIC собралась?
Evgenii
Vladislav
Не имеет, это я гоню
Vladislav
Расскажи
Evgenii
м?
Vladislav
бывает)
Vladislav
единственное, странно что замангленное имя совпало - я поэтому про него и спросил)
Berkus
два егора подряд - это winning streak!
Vitaliy
Товарищи, а может кто в курсе. Как в современных компиояторах обстоит дело со встраиванием функций ? Ещё есть смысл писать inline или компиляторы сами поймут что встроить лучше ?
Berkus
обычно понимают, писать иногда полезно, смотри сгенерированный код
Berkus
если ты просто напишешь inline сильно хуже не будет - эвристики обычно врубаются и отключают инлайнинг если он делает хуже
Berkus
но на все подряд тоже не надо писать
Vladislav
Vitaliy
Matwey
У gcc даже есть ключи чтобы он написал, что и почему он заинлайнил
Vitaliy
Matwey
Он там пишет иногда типа: тело получилось слишком большое, инлайнить я это не буду!
Berkus
это фронтенд к почти всем существующим компиляторам
Жук
я читал что компилятор в 90% заигнорит требование регистрового хранения, но с инлайн то там все проще
Vitaliy
Berkus
Жук
а, соре, я про С99
Berkus
там оно вроде тоже нооп уже )
Жук
разве? где-то в библиотеках от stm видел
Vitaliy
Я так понимаю, что в целом, если функция занимает одну строчку, то можно написать inline, но чего-то от этого ожидать сильно не стоит.
Kirill
Инлайн сейчас пишут чтобы объявленая в хедере не давала компилятору определить себя в каждой единице трансляции и ругнуться компилятору.
Считается что компилятор инлайнит определенные в объявлении класса методы.
И если включен Lto то инлайнит все подряд что хочет
Kirill
И он прав, пусть инлайнит все что хочет
Matwey
Если ты тело в заголовочном файле написал лучше inline дописать
Vitaliy
Я про cpp )
Kirill
Если в спп кинь ее в анон неймспейс, это даст понять компилятору что функцию после использования в данной единице трансляции можно выкинуть и забыть
Vitaliy
Крылатый
На его усмотрение.
Крылатый
inline это пожелание, а не указка.
Крылатый
Крылатый
Не помню, чтобы это в стандарте как-то специально оговаривалось, если честно.
Matwey
Kirill
Я где то читал про то что если методы в объявлении класса определены то они инлайнятся точно, но может я вру, советую проверить и мне сказать, мне тоже интересно)
Matwey
А еще можно -fno-inline
Vitaliy
Спасибо за ответы, попробую поэкспериментировать. Потом отпишусь че и как.
Berkus
Berkus
Matwey
+ ето вот единственное применение наверное
Вообще это очень скользкий вопрос, если нет LTO. В двух единицах трансляции получатся два одинаковых символа (если не инлайнить безусловно такую функцию), а как потом такие две единицы слинковать между собой?
Constantine
inline это модификация линковки
Constantine
да, функция реализованная в definition класса - inline
Berkus
Matwey
Constantine
причем то, что inline реализована во всех использующих TU подразумевает "no diagnosis"
Kirill
Berkus
а вот за пределами класса - надо ставить
Berkus
иначе будет нарушение ODR
Constantine
Berkus
Berkus
Berkus
#pragma once
class A {
void f();
};
inline void A::f() {} // реализуется вне тела класса
class B {
void f() {} // реализуется в теле класса
};
обе inline (при этом компилятор не обязан их инлайнить)
Constantine
при этом MSVC++2015 не проверяет, что inline функция-член класса реализована в использующем TU
Constantine
в случае с функцией-членом классом точно разрешено указывать inline только реализации
Constantine
в остальных - не уверен)
Constantine
Berkus