• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Visual Studio(переносимость)

  • Автор темы Mungust
  • Дата начала
M

Mungust

Название можетне точно отражает суть, а она в следующем. После компиляции программы на С++ даже в release версии она потом упорно не желает работать на машинах, где неустановлена Visual Studio(у меня конкретно VS2008). Нужна ему вроде библиотека MSVCR90D.dll, если верить тоталу. Я так понимаю, что нужно проект компоновать с какими-то другими lib файлами. Может подскажете с какими конкретно? Буду очень благодарен :)
 
Z

zeus

Нужно войти в свойства и в разделе Code Generation (кажется) указать статические либы... я могу ошибаться в названии (потому что я по памяти) но суть такая, что вы компилите проект с ссылками на дин. либы, а нужно на статич. либы вот и все )))
 
O

Odin_KG

Mungust
Вот так попробуйте:
1) Configuration Properties->General->Use of MFC = Use MFC in a Static Library
2) Configuration Properties->C/C++->Code Generation->Runtime Library = Multi-threaded (/MT) (для Release-версии)
 
M

Mungust

Нужно войти в свойства и в разделе Code Generation (кажется) указать статические либы... я могу ошибаться в названии (потому что я по памяти) но суть такая, что вы компилите проект с ссылками на дин. либы, а нужно на статич. либы вот и все )))
- хмм, немного не понял. Статические (*.lib) компонуются с программной для статического связывания с dll, иначе нужно использовать LoadLibrary() и импортировать функции. То есть мне нужно скомпоновать программу с другими lib-файлами, которые свяжут с dll, которые есть в любой XP. Я собственно это и собирался делать, но вот этих msvcтраляля.lib там по папкам туча разных и хрен знает какие нужны :)

Odin_KG, попробую, проверю, отпишусь...
Ну и спасибо, что не проигнорировали :)
 
Z

zeus

Статические (*.lib) компонуются с программной для статического связывания с dll... То есть мне нужно скомпоновать программу с другими lib-файлами, которые свяжут с dll, которые есть в любой XP
Не существует такого понятия, как статического связывания с dll %) Есть динамически подгружаемые библиотеки (DLL), а есть статические библиотеки (Lib)
Вот так попробуйте:
1) Configuration Properties->General->Use of MFC = Use MFC in a Static Library
2) Configuration Properties->C/C++->Code Generation->Runtime Library = Multi-threaded (/MT) (для Release-версии)
Odin_KG все верно подсказал, я имел ввиду тоже самое, только он написал более конкретно =)
 
O

Odin_KG

То есть мне нужно скомпоновать программу с другими lib-файлами, которые свяжут с dll, которые есть в любой XP.
Не... принцип совсем не такой. Если вы используете MFC, то компилятор может либо положить эту MFC прямо в ваш exe-файл, либо ожидать, что MFC будет уже существовать на компьютере в виде отдельной DLL. По-умолчанию VS настроена на вариант 2. Но в реальности этой DLL почти ни у кого нет, так как программисты у нас далеко не все. Значит, вам нужно использовать вариант 1, т.е:
1) Configuration Properties->General->Use of MFC = Use MFC in a Static Library
В этом случае MFC окажется внутри вашего exe и проблема с совместимостью решится, при этом exe-файл увеличиться в размерах, но это того стоит.
 
M

Mungust

Все, разобрался, понял что по сути вы одно и тоже говорите и понял то, что не понял что имел в виду zeus. Пункт 2) помог, а пишу на чистом API и MFC не испльзую, а нужная библиотека есть MS Visual C Runtime и оттуда берутся стандартные функции языка(ну и сервисные всякие, вставляемые компилятором).
 
M

Mungust

Не существует такого понятия, как статического связывания с dll %) Есть динамически подгружаемые библиотеки (DLL), а есть статические библиотеки (Lib)
- ну в таком случае есть два варианта: или статическоесвязывание с dll существует, или Джеффри Рихтер лох педальный Х(. Если по его книге я собственно учился создавать dllки и подключать к своим программам и у меня это получалось, то думаю он все-таки не лох :sorry:. lib-файлы это не библиотеки(хотя я может чего не знаю и туда можно при желании реализацию впихнуть). Они нужны именно для статического связывания с dll. Для статического связывания нужен lib и h файлы для dll функций. Компилятор в итоге вносит нужные dll в раздел импорта программы, и система, прочитав его, загружает нужную dll в адресное простанство процесса при старте программы. То есть связывание статическое, но загрузка библиотеки все равно динамическая. При динамическом связывании с dll ты вручную загружаешь библиотеку в нужный момент, достаешь из нее адреса нужных функций(предварительно создав соответствующий тип и переменную указателя) и собственно по указателя вызываешь. То есть "динамически подгружаемые библиотеки (DLL), а есть статическое и динамическое и ними связывание". В конце концов во всех по всем путям из переменных окружения VS лежат lib, а требует все равно dll. Но это все лирика, спасибо всем за помощь = )
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!