vananabu
Интересующийся
Offline
|
|
« : 07-05-2011 15:08 » |
|
Помогите подключить библиотеку Crypto++ к VS. И если есть какая-нибудь документация по работе с ней, поделитесь, пожалуйста.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #1 : 07-05-2011 21:13 » |
|
Хм, а что её подключать? Если речь об этом Crypto++, то у них не только декларируется совместимость с VS 6.0-2010, но в исходниках даже проект и солюшн для студии есть. А на сайте есть wiki.
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #2 : 08-05-2011 10:00 » |
|
Просто я в этом новичок. Там целая папка папок Debug, Release, Include, Source.. Пробовал через VS 2010, через параметры, но там написано, что "функция редактирования каталогов через VC++ переведена в категорию нерекомендуемых". Мне нужно только RSA шифрование.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 08-05-2011 10:39 » |
|
Не совсем понял, что там не рекомендуется редактировать. Возможно, настраивать глобальные опции для путей, по которым VS ищет заголовки и библиотеки? Или это предупреждение при сборке насчёт каких-то функций, применяемых библиотекой? В последнем случае - давить warning, и всё тут. Как бы то ни было, проще всего сначала отдельно собрать библиотеку из исходников или взять уже собранное, и использовать в своём проекте готовые .lib-файлы и заголовки. Далее я исхожу из того, что у тебя есть каталоги с .lib-файлами и заголовками. В своём проекте в настройках собственно проекта прописываешь путь к библиотечным заголовкам, и там же, в Linker Options - имя библиотечного файла и путь к нему. Далее в нужном месте #include <rsa.h>, и всё, в общем-то. VS под рукой нет, чтобы сейчас всё проверить, но проблем быть не должно. Добавлено через 6 минут и 39 секунд:Глянул вики - http://www.cryptopp.com/wiki/RSA - там в самом конце даны ссылки на демо-проекты. Я второй посмотрел, там, вроде, всё, что нужно есть (путь к библиотеке прописан как "C:\Crypto++ 5.4") - отладочная версия включается для Debug-сборки, релизная - для релизной. Можно взять за образец.
|
|
« Последнее редактирование: 08-05-2011 10:48 от Вад »
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #4 : 08-05-2011 13:32 » |
|
Вроде подключил. всё содержимое include и lib перебросил в соответствующие папки, но во время построения выдает ошибку:
Ошибка 16 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall CkRsa::CkRsa(void)" (??0CkRsa@@QAE@XZ) в функции "void __cdecl ChilkatSample(void)" (?ChilkatSample@@YAXXZ) D:\Учеба\Диплом (исходники)\RSA_crypto\RSA_crypto\RSA_crypto.obj RSA_crypto И таких 16 ошибок!
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #5 : 08-05-2011 18:47 » |
|
vananabu, непонятно. CkRsa - это чей класс? Вроде, не библиотечный: там я такого ни в rsa.h, ни в документации, ни примерах не видел.
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #6 : 09-05-2011 09:59 » |
|
Извиняюся, пытался Chilkat подключить. Вернемся к Crypto++. В папку "заголовочные файлы" я бросил файлы с расширением *.h, "исходного кода" - файлы *.cpp. Куда файлы *.sln, *.rc, *.dsp, *.dsw,*.vcproj,*.bdsgroup,*.bdsproj, *.bpf и наконец *.proto? Можно ли как-то просто указать папку и чтобы vs сам скомпилировал библиотеку?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 09-05-2011 14:00 » |
|
Погоди, зачем тебе всё это добро у себя? Распаковываешь архив с исходниками, открываешь .sln в Студии отдельно, полностью собираешь в конфигурациях Debug и Release, а потом у себя подключаешь - хотя бы по образцу того проекта, про который я говорил выше, если самостоятельно это сложно сделать.
Ничего никуда копировать при этом не надо, надо просто где-то рядом (например, в каталог со своим проектом) положить ВЕСЬ каталог с исходниками и собранными библиотеками, и указать в настройках своего проекта, где находится это "рядом" (хотя бы так же, как в вышеупомянутом примере).
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #8 : 09-05-2011 15:53 » |
|
Запустил файл .sln . Он построил 4 проекта: два из них по видимому для того, чтобы протестировать собранную библиотеку, т.к. в их названии присутствует ~test. Два других он назвал cryptdll и cryptlib, я так понимаю статическая и динамическая библиотеки. Что дальше с ними делать? Попробовал построить, выдает целую жменю ошибок, компоновать, те же яйца только в профиль. в общем порядком уже отчаялся и создается впечатление,что это сделать невозможно. Если есть какая-нибудь литература по этому вопросу,посоветуйте, потому что ничего не нашел в интернете?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #9 : 09-05-2011 18:56 » |
|
vananabu, дальше с ними делать то же самое, что делают в демонстрационных проектах, которых в wiki много. Ты хотя бы один скачал, попробовал собрать, заглянуть в настройки проекта? Смотреть надо то, каким образом реализуется линковка (связывание) сторонних библиотек в проектах visual studio (и в C++, в целом). Это, на самом деле, очень просто, и это есть и в msdn (например: http://msdn.microsoft.com/en-us/library/ms235627%28v=VS.100%29.aspx), и в учебниках - просто нужно знать, что искать. Искать надо вещи, связанные со статической линковкой и статическими библиотеками.
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #10 : 10-05-2011 07:46 » |
|
Извините! Моя оплошность) Вчера вечером еще раз пробовал собирать, думал что не получилось. Просто не заглянул в папку. Там теперь есть папки Debug 32 и 64, Release 32 и 64, ну а в них библиотеки.
Добавлено через 5 часов, 25 минут и 41 секунду: Все вроде сделал как написано (подключил в настройках проекта библиотеки для Release и Debug версий, подключил папку Include, в настройках компоновщика "дополнительные каталоги библиотек" - поставил корневую папку, которая содержит папки Release32, Debug32 и Include, в тексте программы подключил нужные заголовки). Выдает кучу ошибок, хотя во время написания программы видит все методы для класса RSA. Все вот такого содержания:
Ошибка 21 error LNK2001: неразрешенный внешний символ ""public: virtual bool __thiscall CryptoPP::BufferedTransformation::AnyMessages(void)const " (?AnyMessages@BufferedTransformation@CryptoPP@@UBE_NXZ)" D:\Учеба\Диплом (исходники)\Crypto_fignja\Crypto_fignja\Crypto_fignja.obj Crypto_fignja
|
|
« Последнее редактирование: 10-05-2011 13:12 от vananabu »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #11 : 10-05-2011 13:39 » |
|
Скачал себе исходники этой Cryptopp. В последней версии, почему-то, библиотека что в debug, что в release имеет одно и то же имя (хотя в примерах отладочная названа cryptolibd.lib). Ну да ладно.
В общем, я у себя нормально собрал пример, указав: Additional Include Directories: "<неважно>\cryptopp561 Additional Library Directories: "<неважно>\cryptopp561\Win32\output\debug" и "<неважно>\cryptopp561\Win32\output\release" соответственно. Линковал cryptolib.lib
Всё собирается, сэмпл отрабатывает
ЗЫ. Собирал в 2005й и 2008й студии, пути могут отличаться. Ты в Linker->Additional Dependencies саму библиотеку вписал? (Или хотя бы #pragma comment ( lib, "cryptlib" ))
|
|
« Последнее редактирование: 10-05-2011 13:42 от Вад »
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #12 : 10-05-2011 14:17 » |
|
Подключил cryptopp.lib. Пишет, что не хватает cryptopp.dll. Это происходит после успешного построения во время появления окна для отображения результатов работы программы. Возможно ли что это из-за того, что библиотеки для release и debug одинаково называются?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #13 : 10-05-2011 15:33 » |
|
vananabu, так dll должна лежать рядом с exe файлом.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #14 : 10-05-2011 15:44 » |
|
Dimka, А какую dll кидать: которая в папке release32 или debug32?
Добавлено через 6 минут и 22 секунды: Попробовал обе dll по отдельности копировать. Вылетает исключение с надписью нарушение прав доступа при чтении.
|
|
« Последнее редактирование: 10-05-2011 15:51 от vananabu »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #15 : 10-05-2011 17:07 » |
|
vananabu, а exe и dll под одну платформу x86 либо x64? Если под разные, то будет исключение. Ну или ошибка в программе.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #16 : 10-05-2011 19:17 » |
|
под x86. Опишу подробно как все делал с самого начала: 1. Работаю с готовой скачанной скомпилированной библиотекой. 2. Создаю проект. 3. В свойствах проекта для конфигурации: - (Debug (активная)) в пункте каталоги VC++: каталоги включения - путь к Include, каталоги библиотек - путь к папке Debug32. - (Release) то же самое, только папка Release32. 4. Текст программы с официального сайта: 5. Для компоновщика подключение библиотеки - #pragma comment ( lib, "cryptopp" ); Возможно проблема, т.к. для Release и Debug библиотеки называются одинаково - cryptopp.lib? #include <rsa.h> #include <iostream> #include <conio.h> #include <osrng.h> #pragma comment ( lib, "cryptopp" )
using namespace std; using namespace CryptoPP;
int main() { //Генерирует параметры для RSA AutoSeededRandomPool rng; InvertibleRSAFunction params; params.GenerateRandomWithKeySize(rng,1024);
const Integer& n = params.GetModulus(); const Integer& p = params.GetPrime1(); const Integer& q = params.GetPrime2(); const Integer& d = params.GetPrivateExponent(); const Integer& e = params.GetPublicExponent();
//Вывод их на экран cout << "RSA Parameters:" << endl; cout << " n: " << n << endl; cout << " p: " << p << endl; cout << " q: " << q << endl; cout << " d: " << d << endl; cout << " e: " << e << endl; cout << endl;
//Генерация ключей по полученным параметрам RSA::PrivateKey privateKey(params); RSA::PublicKey publicKey(params);
_getch(); return 0; } Добавлено через 19 минут и 23 секунды:И как правильно собрать библиотеку? Есть 4 решения: -cryptest -cryptlib -cryptopp -dlltest Решение для всех 4 строить или только, например, для cryptlib? И когда строишь сначала выбирать активной конфигурацию Debug, а потом Release и для каждой из них делать построение решения?
|
|
« Последнее редактирование: 17-05-2011 10:55 от Джон »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #17 : 10-05-2011 20:06 » |
|
vananabu, проблем с одинаковыми именами быть не должно, поскольку отладочная и релизная версии лежат в разных директориях, а в опциях линковки для каждой из конфигураций надо указать путь лишь к одной из них, соответственно.
Я из исходников строил всё целиком, а уже потом разбирался. Но если не хочется тесты собирать, то всё кроме тестов построить. Я не разбирался, что там для чего, честно говоря, и обязательно ли использовать dll, или есть вариант со статической библиотекой.
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #18 : 10-05-2011 20:58 » |
|
все так. Все равно выдает ошибку. Возможно проблема в VS 2010?
Добавлено через 2 минуты и 2 секунды: Вы не могли бы передать свою откомпилированную библиотеку? И как проверить, что библиотека работает правильно?
Добавлено через 20 часов, 46 минут и 37 секунд: Проблема вроде решилась! Установил VS2008 и все нормально, запускаются тестовые программы! Спасибо всем за помощь!
|
|
« Последнее редактирование: 11-05-2011 17:46 от vananabu »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #19 : 12-05-2011 07:24 » |
|
Скачал пакет с бинарниками - они и правда какие-то недоделанные, похоже. При линковке ругается на неполноценность библиотеки, приложенные исходники не собираются из-за отсутствия заголовков (+, тестовый проект тоже не находится). Возьми себе последнюю версию исходников (я собирал 5.61), и попробуй собрать их. Не думаю, что дело в Студии - скорее, авторы кривой пакет выложили.
|
|
|
Записан
|
|
|
|
vananabu
Интересующийся
Offline
|
|
« Ответ #20 : 14-05-2011 16:59 » |
|
Проблема все-таки была в VS 2010. Т.к. установив VS2008, провел все те же манипуляции, что и с vs2010. Как результат на 08 работают все программы с офф. сайта, на 10 ни одна не работает..
Добавлено через 2 дня, 17 часов, 28 минут и 38 секунд: Проблема все-таки в кривых руках) Наконец-то разобрался! Позже опишу подробно как подключить корректно Crypto++ к VS для таких же как и я)
|
|
« Последнее редактирование: 17-05-2011 10:28 от vananabu »
|
Записан
|
|
|
|
|