Статические библиотеки и __declspec(selectany)
От: Caracrist https://1pwd.org/
Дата: 02.05.10 13:50
Оценка:
В одном из файлов ATL(atlsmtpconnection.h) есть хитрая строчка:
__declspec(selectany) CSMTPWSAStartup _g_smtp_init;

она вызывает конструктор, который в свою очередь использует внешнюю функцию WSAStartup.
Всё это дело крашится если модуль с WSAStartup не подгрузился на момент инициализации _g_smtp_init.
В проэкте много модулей где этот selectany мог построится, и непонятно как проконтролировать загрузку нужного модуля до этой строчки.
Как выход, используем delay-load, но есть потребность обойтись как нибудь без него.
Может есть какой способ управлять очерёдностью подгрузки статически линкованных модулей?

P.S. VS2005, c++, ATL

04.05.10 18:10: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
~~~~~
~lol~~
~~~ Single Password Solution
atl
Re: Статические библиотеки и __declspec(selectany)
От: Caracrist https://1pwd.org/
Дата: 03.05.10 09:38
Оценка:
Это вроде должна быть стандартная задача, упорядочить подгрузку dll-ек. Неужели никто не сталкивался?
~~~~~
~lol~~
~~~ Single Password Solution
Re[2]: Статические библиотеки и __declspec(selectany)
От: Аноним  
Дата: 03.05.10 09:52
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>Это вроде должна быть стандартная задача, упорядочить подгрузку dll-ек. Неужели никто не сталкивался?


Могу ошибиться, но ИМХО это невозможно.
Re[3]: Статические библиотеки и __declspec(selectany)
От: Pavel Dvorkin Россия  
Дата: 03.05.10 09:53
Оценка:
Сообщение было от меня
With best regards
Pavel Dvorkin
Re: Статические библиотеки и __declspec(selectany)
От: _nn_ www.nemerleweb.com
Дата: 03.05.10 10:14
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>В одном из файлов ATL(atlsmtpconnection.h) есть хитрая строчка:


Единственным решением будет ее убрать совсем.
Нельзя вызывать WSAStartup в DllMain и тем более до нее.

P.S.
Кстати, откуда вы брали этот файл ?
Начиная с VS2008 он не поставляется, а содержится в другом проекте http://atlserver.codeplex.com/ .

Как обычно с проектами где код открыт, можно написать в багтрекер и предложить исправление.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Статические библиотеки и __declspec(selectany)
От: Caracrist https://1pwd.org/
Дата: 03.05.10 11:31
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Единственным решением будет ее убрать совсем.

__>Нельзя вызывать WSAStartup в DllMain и тем более до нее.
Не хотим делать изменения во внешней библиотеке, мало-ли с чем оно потом будет не совместимо...
__>P.S.
__>Кстати, откуда вы брали этот файл ?
VS2005
__>Начиная с VS2008 он не поставляется, а содержится в другом проекте http://atlserver.codeplex.com/ .
Там эта проблема не решена.
__>Как обычно с проектами где код открыт, можно написать в багтрекер и предложить исправление.
Нет возможности ждать их решения, хотелось бы всё-таки контролировать порядок загрузки модулей. Это было бы идеальным решением без лишней зависимости...
~~~~~
~lol~~
~~~ Single Password Solution
Re[3]: Статические библиотеки и __declspec(selectany)
От: _nn_ www.nemerleweb.com
Дата: 03.05.10 11:49
Оценка:
Здравствуйте, Caracrist, Вы писали:

__>>Как обычно с проектами где код открыт, можно написать в багтрекер и предложить исправление.

C>Нет возможности ждать их решения, хотелось бы всё-таки контролировать порядок загрузки модулей. Это было бы идеальным решением без лишней зависимости...
Можно попробовать порядок либов (.lib) подсунуть линкеру в желаемом порядке, но это не гарантирует ничего.

А не нужно ждать решения, просто возьмите исходники и уберите эту строчку, ну заодно и патч предоставьте.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Статические библиотеки и __declspec(selectany)
От: Caracrist https://1pwd.org/
Дата: 03.05.10 11:53
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Можно попробовать порядок либов (.lib) подсунуть линкеру в желаемом порядке, но это не гарантирует ничего.


уже проверили, не решение.
~~~~~
~lol~~
~~~ Single Password Solution
Re[4]: Статические библиотеки и __declspec(selectany)
От: Caracrist https://1pwd.org/
Дата: 03.05.10 12:31
Оценка:
Здравствуйте, _nn_, Вы писали:

__>А не нужно ждать решения, просто возьмите исходники и уберите эту строчку, ну заодно и патч предоставьте.


http://atlserver.codeplex.com/WorkItem/View.aspx?WorkItemId=12923

Пока нас на это хватило
~~~~~
~lol~~
~~~ Single Password Solution
Re[5]: Статические библиотеки и __declspec(selectany)
От: _nn_ www.nemerleweb.com
Дата: 03.05.10 13:08
Оценка: 3 (1)
Здравствуйте, Caracrist, Вы писали:

Что если сделать библиотеку зависящую от ws2_32.lib и вашу библиотеку зависящую от первой.
Может так получится загрузить windows sockets раньше ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.