Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Всем привет. Ковыряюсь с известной криптографической библиотекой libsodium (форк NaCl ) В подпапке libsodium\builds\msvc\vs2013 лежит libsodium.sln, с помощью которого можно построить библиотеку либо как dynamic library(.dll), либо как static library(.lib). Интересует построение именно .dll. Все строится, работает, но при выполнении требует установку "рантайма" (Redistributable Package). Хотелось бы избежать этого. Попытка решения "в лоб" путем установки ключа компиляции /MT (вместо /MD) вызывает ошибки линковки: Ошибки1>pwhash_scryptsalsa208sha256.obj : error LNK2019: unresolved external symbol __imp__memchr referenced in function _crypto_pwhash_scryptsalsa208sha256_str_verify 1>crypto_scrypt-common.obj : error LNK2019: unresolved external symbol __imp__strchr referenced in function _decode64_one 1>utils.obj : error LNK2001: unresolved external symbol __imp__strchr 1>randombytes_salsa20_random.obj : error LNK2019: unresolved external symbol __imp___ftime64 referenced in function _sodium_hrtime Вот, я нашел еще одного "страдальца", которому ответили: Ответили:Looks like you are trying to build a dynamic library (your configuration is ReleaseDLL), but at the same time selecting the /MT runtime which is only for static libraries. ...и посоветовали: ...и посоветовали:Just select a different configuration, such as ReleaseLIB. The output will be a static library (.LIB) using the /MT runtime. Однако, нужна именно .dll. Может, я что-то недопонимаю, и /MT действительно нельзя использовать при построении .dll? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 03:22 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
чччДМожет, я что-то недопонимаю, и /MT действительно нельзя использовать при построении .dll? Попробуйте /MT + /NODEFAULTLIB + явная линковка с libcmt.lib Хотя по идее /MT это оно же и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 05:32 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Хотя ошибка "unresolved external symbol __imp__strchr" говорит о том что компиляция была с ключем /MD. Возможно, надо вручную удалить .obj и пересобрать с ключем /MT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 05:34 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
чччД, те, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 08:55 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivчччД, те, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. ОК, спасибо. Буду использовать redistributable pack. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 11:27 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. Можно ссылку на доку. Давно на C не писал, но в свое время в MS VS 6.0 собирал проект (DLL с MFC статическая линковка), проблем не было. Вроде и по https://msdn.microsoft.com/ru-ru/library/2kzt1wy3(v=vs.110).aspx тоже вполне можно. Anatoly MoskovskyХотя ошибка "unresolved external symbol __imp__strchr" говорит о том что компиляция была с ключем /MD. Возможно, надо вручную удалить .obj и пересобрать с ключем /MT + ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 12:43 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. Не придумывайте. Можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 14:18 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevMasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. Можно ссылку на доку. Давно на C не писал, но в свое время в MS VS 6.0 собирал проект (DLL с MFC статическая линковка), проблем не было. Проблем может не быть, но так делать нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 19:25 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)? Нет, нельзя. Не придумывайте. Можно. Тебе -- можно. Ему -- нельзя. Доволен ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 19:25 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivПроблем может не быть, но так делать нельзя. Почему же? p.s. хотя вроде по поводу этого уже спорили и каждый остался при своем мнении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 19:27 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Тебе -- можно. Ему -- нельзя. Доволен ? 1) Потенциальные проблемы не имеют отношения к текущему топику где обсуждаются ошибки сборки, которых не должно быть. 2) Т.к. обсуждаемая либа - на чистом С, то надо очень постараться чтобы не взлетело со статическим рантаймом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 21:24 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Клиент очевидно не понимает что делает. Хотя те 3 функции которые вылезли у него в линковке, вряд ли будут источником проблем в дальнейшем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 22:24 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Ему -- нельзя. SiemarglКлиент очевидно не понимает что делает Каким-то снобизмом попахивает ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 22:57 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Что ты, обычная закрытая секта =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2016, 23:19 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevMasterZivПроблем может не быть, но так делать нельзя. Почему же? p.s. хотя вроде по поводу этого уже спорили и каждый остался при своем мнении ребята, на вопрос "почему" почитайте хотя бы ту же документацию по компилятору в MSDN. Там в общем четко написано, что если ты строишь .dll, то надо использовать динамический рантайм, потому что у приложения и твоей .dll должен быть один и тот же рантайм, а не несколько. Дальше вы можете не верить официальной документации, и искать приключения себе на задницу, тут, безусловно, у вас полная свобода, потому что мы в конце концов в свободной стране живем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 11:28 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivТам в общем четко написано можно для тупых ссылку а то лично я "смотрю в книгу и вижу фигу" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 11:57 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevMasterZivТам в общем четко написано можно для тупых ссылку а то лично я "смотрю в книгу и вижу фигу" https://msdn.microsoft.com/ru-ru/library/abx4dbyh(v=vs.100).aspx MSDNBecause a DLL built by linking to a static CRT will have its own CRT state, it is not recommended to link statically to the CRT in a DLL unless the consequences of this are specifically desired and understood . For example, if you call _set_se_translator in an executable that loads the DLL linked to its own static CRT, any hardware exceptions generated by the code in the DLL will not be caught by the translator, but hardware exceptions generated by code in the main executable will be caught. If you are using the /clr compiler switch, your code will be linked with a static library, msvcmrt.lib. The static library provides a proxy between your managed code and the native CRT. You cannot use the statically linked CRT ( /MT or /MTd options) with /clr. Use the dynamically-linked libraries (/MD or /MDd) instead. P.S. нашёл за 5 минут, больше у меня и не было, так что и вы при сильном желании могли бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 15:23 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivТам в общем четко написано, что если ты строишь .dll, то надо использовать динамический рантайм, потому что у приложения и твоей .dll должен быть один и тот же рантайм, а не несколько. Меня давным-давно на курсах английскому учили, что в английском есть выражения: HAVE TO SHOULD Фраза "it is not recommended" не мой взгляд, это полностью НЕ have to. Мало того, все это начинается с "DLL built by linking to a static CRT will have its own CRT state" Так блин, ребята, я ровно за тем статически и линкую. Т.к. мои DLL обычно используются в сторонних (НЕ моих) программах и мне нафиг не нужно, что бы мой код менял какое либо состояние стороннего (неизвестного) приложения и так же не нужно, что бы какие либо операции там, меняли мое состояние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 15:45 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevMasterZivТам в общем четко написано, что если ты строишь .dll, то надо использовать динамический рантайм, потому что у приложения и твоей .dll должен быть один и тот же рантайм, а не несколько. Меня давным-давно на курсах английскому учили, что в английском есть выражения: HAVE TO SHOULD Фраза "it is not recommended" не мой взгляд, это полностью НЕ have to. Мало того, все это начинается с "DLL built by linking to a static CRT will have its own CRT state" Так блин, ребята, я ровно за тем статически и линкую. Т.к. мои DLL обычно используются в сторонних (НЕ моих) программах и мне нафиг не нужно, что бы мой код менял какое либо состояние стороннего (неизвестного) приложения и так же не нужно, что бы какие либо операции там, меняли мое состояние. Логика безумная. Но если хочешь на свою попу приключений -- вперёд, я уже написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 18:31 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
MasterZivЛогика безумная. Но если хочешь на свою попу приключений -- вперёд, я уже написал. Не знаю, в чем безумная. > 15 лет DLL на Borland C, MS C клепал под FoxPro 2.6, Access, Oracle Forms, Macromedia Director (ActiveX), Java и т.д. Никаких проблем не замечал. Просто интересно, как при логике "у приложения и твоей .dll должен быть один и тот же рантайм" люди умудряются DLL "внезапно" создавать даже на других компиляторах. Как при Вашей логике, делать DLL для сторонних приложений? Например для Java старых версий. Как тут обеспечить "у приложения и твоей .dll должен быть один и тот же рантайм"? === Проблема могут быть. Например при использование MFC. Но, опять таки, нужно внимательно читать документацию и, по факту, проблемы исчезают. Когда встраивал MFC DLL в Oracle Forms была пара веселых недель, когда разбирался как правильно слинковать. Но когда корректно написал код и слинковал статистически - все проблемы исчезли. У корневого приложение "свое MFC", у DLL "свое MFC". Т.к. Windows и есть Windows, взаимодействовать между окнами через чистый HWND никто не запрещает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 18:47 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
>Никаких проблем не замечал. значит, тебе везло... >Просто интересно, как при логике "у приложения >и твоей .dll должен быть один и тот же рантайм" >люди умудряются DLL "внезапно" создавать >даже на других компиляторах. иногда разные компиляторы имеют один и тот же рантайм... > Как тут обеспечить "у приложения и твоей .dll >должен быть один и тот же рантайм"? ты прав, это не всегда возможно... === >Проблема могут быть. Например при >использование MFC. MFC -то тут при чем? "MFC" нужно выбросить, тогда фраза будет правильной: "Проблемы могут быть, например, при использовании." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 19:26 |
|
||
|
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevMasterZivЛогика безумная. Но если хочешь на свою попу приключений -- вперёд, я уже написал. Не знаю, в чем безумная. > 15 лет DLL на Borland C, MS C клепал под FoxPro 2.6, Access, Oracle Forms, Macromedia Director (ActiveX), Java и т.д. Никаких проблем не замечал. Просто интересно, как при логике "у приложения и твоей .dll должен быть один и тот же рантайм" люди умудряются DLL "внезапно" создавать даже на других компиляторах. Как при Вашей логике, делать DLL для сторонних приложений? Например для Java старых версий. Как тут обеспечить "у приложения и твоей .dll должен быть один и тот же рантайм"? === Проблема могут быть. Например при использование MFC. Но, опять таки, нужно внимательно читать документацию и, по факту, проблемы исчезают. Когда встраивал MFC DLL в Oracle Forms была пара веселых недель, когда разбирался как правильно слинковать. Но когда корректно написал код и слинковал статистически - все проблемы исчезли. У корневого приложение "свое MFC", у DLL "свое MFC". Т.к. Windows и есть Windows, взаимодействовать между окнами через чистый HWND никто не запрещает. Ну, проблема есть. Но не такая уж и смертельная. Я эту библиотеку ( 18957103 ) в Delphi использую. Приходится иногда что-то доделывать. Например, выделенную в dll память я не могу освободить средствами Delphi (и наоборот), пришлось в dll добавить функцию для освобождения памяти и экспортировать ее для использования в Delphi. Но ничего страшно-ужасного до сих пор не случалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2016, 19:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39197458&tid=2018573]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 283ms |
| total: | 423ms |

| 0 / 0 |
