Не нужные экспорты
От: Barbar1an Украина  
Дата: 28.10.18 20:10
Оценка:
проект компилируется в DLL, в проекте есть экспортируемые классы унаследованные от std
линкуется всё с shared CRT
и это приводит к тому что наша DLL почемуто на выходе имеет экспорты методов std классов

проблема в том что если мы линкуем в проект эту длл и другую длл которая тоже слинкована с shared CRT и экспортирует стд унаследованные классы(судя по всему), в итоге получается конфликт потому что некоторые std классы экспортируются сразу из двух либ

как этого избежать? чтобы экспорт унаследованных от стд классов приводил к экпорту только их самих, а не их и их базовых стд классов?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 28.10.2018 21:12 Barbar1an . Предыдущая версия .
Re: Не нужные экспорты
От: Мёртвый Даун Россия  
Дата: 29.10.18 04:05
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

B>как этого избежать? чтобы экспорт унаследованных от стд классов приводил к экпорту только их самих, а не их и их базовых стд классов?


Мы еще стопицот лет назад решили эту проблему, и по сей день: никогда не экспортить классы! Только функции!
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Re[2]: Не нужные экспорты
От: uentity  
Дата: 30.10.18 04:47
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Здравствуйте, Barbar1an, Вы писали:


B>>как этого избежать? чтобы экспорт унаследованных от стд классов приводил к экпорту только их самих, а не их и их базовых стд классов?


МД>Мы еще стопицот лет назад решили эту проблему, и по сей день: никогда не экспортить классы! Только функции!


Идея здравая. Правильно ли я понимаю, что конструкторы и деструкторы тоже надо явно экспортировать, чтобы в клиентском коде можно было создавать объекты классов (с экспортированными функциями)?
Re[3]: Не нужные экспорты
От: DTB Россия  
Дата: 30.10.18 09:41
Оценка:
Здравствуйте, uentity, Вы писали:

U>Здравствуйте, Мёртвый Даун, Вы писали:


МД>>Здравствуйте, Barbar1an, Вы писали:


B>>>как этого избежать? чтобы экспорт унаследованных от стд классов приводил к экпорту только их самих, а не их и их базовых стд классов?


МД>>Мы еще стопицот лет назад решили эту проблему, и по сей день: никогда не экспортить классы! Только функции!


U>Идея здравая. Правильно ли я понимаю, что конструкторы и деструкторы тоже надо явно экспортировать, чтобы в клиентском коде можно было создавать объекты классов (с экспортированными функциями)?


зачем? экспортируете функции создания/удаления нужного класса и работаете дальше как обычно
Have fun...
Re[4]: Не нужные экспорты
От: Barbar1an Украина  
Дата: 30.10.18 09:42
Оценка:
Здравствуйте, DTB, Вы писали:

DTB>Здравствуйте, uentity, Вы писали:


U>>Здравствуйте, Мёртвый Даун, Вы писали:


МД>>>Здравствуйте, Barbar1an, Вы писали:


B>>>>как этого избежать? чтобы экспорт унаследованных от стд классов приводил к экпорту только их самих, а не их и их базовых стд классов?


МД>>>Мы еще стопицот лет назад решили эту проблему, и по сей день: никогда не экспортить классы! Только функции!


U>>Идея здравая. Правильно ли я понимаю, что конструкторы и деструкторы тоже надо явно экспортировать, чтобы в клиентском коде можно было создавать объекты классов (с экспортированными функциями)?


DTB>зачем? экспортируете функции создания/удаления нужного класса и работаете дальше как обычно


у нас так и было, а потом вдруг оказалось что нужно иметь возможность наследоваться от классов из другого проекта
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: Не нужные экспорты
От: kov_serg Россия  
Дата: 30.10.18 09:55
Оценка:
Здравствуйте, Barbar1an, Вы писали:

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

А зачем понадобилось это делать динамически?
Re: Не нужные экспорты
От: AlexGin Беларусь  
Дата: 30.10.18 10:57
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>проект компилируется в DLL, в проекте есть экспортируемые классы унаследованные от std

B>линкуется всё с shared CRT
B>и это приводит к тому что наша DLL почемуто на выходе имеет экспорты методов std классов

B>проблема в том что если мы линкуем в проект эту длл и другую длл которая тоже слинкована с shared CRT и экспортирует стд унаследованные классы(судя по всему), в итоге получается конфликт потому что некоторые std классы экспортируются сразу из двух либ


Насколько я помню, в MSVC есть опция линкера, чтобы этого избежать. Когда-то я успешно пользовался ею в такой ситуации.
Приведи, пожалуйста, код ошибки, тогда смогу подсказать что-то конкретнее.
Re[2]: Не нужные экспорты
От: Barbar1an Украина  
Дата: 30.10.18 11:03
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Здравствуйте, Barbar1an, Вы писали:


B>>проект компилируется в DLL, в проекте есть экспортируемые классы унаследованные от std

B>>линкуется всё с shared CRT
B>>и это приводит к тому что наша DLL почемуто на выходе имеет экспорты методов std классов

B>>проблема в том что если мы линкуем в проект эту длл и другую длл которая тоже слинкована с shared CRT и экспортирует стд унаследованные классы(судя по всему), в итоге получается конфликт потому что некоторые std классы экспортируются сразу из двух либ


AG>Насколько я помню, в MSVC есть опция линкера, чтобы этого избежать. Когда-то я успешно пользовался ею в такой ситуации.

AG>Приведи, пожалуйста, код ошибки, тогда смогу подсказать что-то конкретнее.


да проект уже переделал, ошибка там банальная, чтото типа

error LNK2005: бла бла бла already defined in бла бла бла
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[6]: Не нужные экспорты
От: Barbar1an Украина  
Дата: 30.10.18 11:08
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, Barbar1an, Вы писали:


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

_>А зачем понадобилось это делать динамически?

в смысле динамически?))) наследуемся мы как обычно наследуются.

наверно вопрос зачем мы экспортировали классы? ну наверно чтобы сборку проекта ускорить же ж,

а еще я не совсем понимаю как кросс-ссылки делать с forward-declaration (класс А использует Б, а Б использует А), если у меня в cpp пусто будет
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: Не нужные экспорты
От: Barbar1an Украина  
Дата: 30.10.18 11:10
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Здравствуйте, Barbar1an, Вы писали:


B>>проект компилируется в DLL, в проекте есть экспортируемые классы унаследованные от std

B>>линкуется всё с shared CRT
B>>и это приводит к тому что наша DLL почемуто на выходе имеет экспорты методов std классов

B>>проблема в том что если мы линкуем в проект эту длл и другую длл которая тоже слинкована с shared CRT и экспортирует стд унаследованные классы(судя по всему), в итоге получается конфликт потому что некоторые std классы экспортируются сразу из двух либ


AG>Насколько я помню, в MSVC есть опция линкера, чтобы этого избежать. Когда-то я успешно пользовался ею в такой ситуации.

AG>Приведи, пожалуйста, код ошибки, тогда смогу подсказать что-то конкретнее.


это вы наверно путаете с оыбчной проблемой когда у вас линкуется две либы и каждоый совя версия црт, а тут проблема имеет место даже елси версии црт одинаковые, тут не с црт райнтаймом беда а с экспортом црт классов
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Не нужные экспорты
От: AlexGin Беларусь  
Дата: 30.10.18 14:49
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>это вы наверно путаете с оыбчной проблемой когда у вас линкуется две либы и каждоый совя версия црт,

Возможно и так, но ИМХО — лекарство разве не одинаковое...

B>а тут проблема имеет место даже елси версии црт одинаковые, тут не с црт райнтаймом беда а с экспортом црт классов

Но там формулировка примерно такая: типа если два одинаковы — добавить флаг если множественное определение...

Вот:
1) https://stackoverflow.com/questions/10046485/error-lnk2005-already-defined
2) https://msdn.microsoft.com/en-us/library/72zdcz6f.aspx

add /FORCE:MULTIPLE to the linker command line options.
Отредактировано 30.10.2018 14:56 AlexGin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.