powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
22 сообщений из 22, страница 1 из 1
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39196702
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Ковыряюсь с известной криптографической библиотекой 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?
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39196712
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДМожет, я что-то недопонимаю, и /MT действительно нельзя использовать при построении .dll?
Попробуйте /MT + /NODEFAULTLIB + явная линковка с libcmt.lib

Хотя по идее /MT это оно же и есть.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39196714
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя ошибка "unresolved external symbol __imp__strchr" говорит о том что компиляция была с ключем /MD.
Возможно, надо вручную удалить .obj и пересобрать с ключем /MT
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39196737
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,
те, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)?

Нет, нельзя.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39196885
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivчччД,
те, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)?

Нет, нельзя.
ОК, спасибо. Буду использовать redistributable pack.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197024
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
+
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197158
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)?

Нет, нельзя.
Не придумывайте. Можно.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197457
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevMasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)?

Нет, нельзя.
Можно ссылку на доку.

Давно на C не писал, но в свое время в MS VS 6.0 собирал проект (DLL с MFC статическая линковка), проблем не было.



Проблем может не быть, но так делать нельзя.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197458
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyMasterZivте, Можно ли линковать твою .dll с CRT в виде статической библиотеки (.lib)?

Нет, нельзя.
Не придумывайте. Можно.

Тебе -- можно. Ему -- нельзя.
Доволен ?
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197459
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПроблем может не быть, но так делать нельзя.

Почему же?

p.s. хотя вроде по поводу этого уже спорили и каждый остался при своем мнении
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197499
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Тебе -- можно. Ему -- нельзя.
Доволен ?
1) Потенциальные проблемы не имеют отношения к текущему топику где обсуждаются ошибки сборки, которых не должно быть.

2) Т.к. обсуждаемая либа - на чистом С, то надо очень постараться чтобы не взлетело со статическим рантаймом.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197518
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Клиент очевидно не понимает что делает.

Хотя те 3 функции которые вылезли у него в линковке, вряд ли будут источником проблем в дальнейшем.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197529
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Ему -- нельзя.
SiemarglКлиент очевидно не понимает что делает
Каким-то снобизмом попахивает )))
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197537
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ты, обычная закрытая секта =)
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197800
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevMasterZivПроблем может не быть, но так делать нельзя.

Почему же?

p.s. хотя вроде по поводу этого уже спорили и каждый остался при своем мнении


ребята, на вопрос "почему" почитайте хотя бы ту же документацию по компилятору в MSDN.
Там в общем четко написано, что если ты строишь .dll, то надо использовать динамический рантайм, потому что у приложения и твоей .dll должен быть один и тот же рантайм, а не несколько.

Дальше вы можете не верить официальной документации, и искать приключения себе на задницу, тут, безусловно, у вас полная свобода, потому что мы в конце концов в свободной стране живем...
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39197826
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТам в общем четко написано

можно для тупых ссылку

а то лично я "смотрю в книгу и вижу фигу"
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198062
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 минут, больше у меня и не было, так что и вы при сильном желании могли бы...
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198097
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 обычно используются в сторонних (НЕ моих) программах и мне нафиг не нужно, что бы мой код менял какое либо состояние стороннего (неизвестного) приложения и так же не нужно, что бы какие либо операции там, меняли мое состояние.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198258
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 обычно используются в сторонних (НЕ моих) программах и мне нафиг не нужно, что бы мой код менял какое либо состояние стороннего (неизвестного) приложения и так же не нужно, что бы какие либо операции там, меняли мое состояние.

Логика безумная.
Но если хочешь на свою попу приключений -- вперёд, я уже написал.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198274
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 никто не запрещает.
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198297
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Никаких проблем не замечал.

значит, тебе везло...

>Просто интересно, как при логике "у приложения >и твоей .dll должен быть один и тот же рантайм" >люди умудряются DLL "внезапно" создавать >даже на других компиляторах.

иногда разные компиляторы имеют один и тот же рантайм...

> Как тут обеспечить "у приложения и твоей .dll >должен быть один и тот же рантайм"?

ты прав, это не всегда возможно...

===

>Проблема могут быть. Например при >использование MFC.

MFC -то тут при чем?
"MFC" нужно выбросить, тогда фраза будет правильной: "Проблемы могут быть, например, при использовании."
...
Рейтинг: 0 / 0
MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
    #39198301
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.

Но ничего страшно-ужасного до сих пор не случалось.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS VS 2013, построение библиотеки libsodium: можно ли строить .dll - проект с ключом /MT ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]