Господа,
у меня серьезный и важный вопрос, над которым я бьюсь головой об клавиатуру уже больше недели.
Я даже готов обсудить вознаграждение тому, кто мне поможет.
Вопрос такой: надо меня научить правильно ставить галочки в настройках линкера под VS 2015, чтобы у меня библиотека libevent линковалась к проекту на c++ (и, возможно, правильно билдить эту библиотеку).
Предыстория вопроса:
я прочитал пару мотивирующитъх статей насчет библиотеки libevent
(напрмер, эту:
https://habrahabr.ru/post/217437/ ).
Начал я с того, что сделал девелоперскую машину под Ubuntu 16 LTS,
куда поставл g++ и собрал библиотеку из исходников по иструкциям с гитхаба.
(
https://github.com/libevent/libevent )
Потом я написал простую программу test.cpp, в которой попробовал инициализировать библиотеку:
#include <memory>
#include <cstdint>
#include <iostream>
#include <evhttp.h>
#include <string>
#include <fstream>
using namespace std;
int main(){
cout<< "Hi!" << endl ;
if ( !event_init())
cout << "Failed to init libevent." << endl;
else
cout << "libevent init successfully!" << endl;
return 0;
}
После небольшого замешательства я нормально собрал эту программу командой
g++ -std=c++11 -o test.ex test.cpp -levent
и запустил её.
./test.ex
Всё работает. Это пркрасно.
Затем я переписал из примеров немного более сложный пример...
Но как только я начал писать сам — мне понадобилась отладка.
И родная для меня система в этом смысле — Windows.
Ну, вы понимаете... родственников не выбирают...
А под Windows все совсем не так гладко.
Во первых, нужно собрать библиотеку из исходников.
По инструкции я делаю это при помощи CMake:
"CMake (Windows)
Install CMake: http://www.cmake.org
$ md build && cd build
$ cmake -G "Visual Studio 10" .. # Or whatever generator you want to use
$ start libevent.sln"
Cmake при сборке ругается на отсутствие OpenSSL, и тут уже не помогают никакие танцы с бубнами:
чтобы использовать OpenSSL под виндой, надо определить три магические переменные окружения
OPENSSL_ROOT_DIR
OPENSSL_INCLUDE_DIR
OPENSSL_CRYPTO_LIBRARY
а как эти переменные определять — не написано нигде.
К счастью, если закрыта дверь — можно проверить окно...
libevent позволяет собрать себя без поддержки OpenSSL, дописыванием ключика -DEVENT__DISABLE_OPENSSL=on,
то есть командой
cmake -DEVENT__DISABLE_OPENSSL=on -G "Visual Studio 14 2015"
Меня, правда, немного смущают некоторые предупреждения, которые написала мне эта команда,
её вывод видно здесь:
| Pic0 |
| |
| |
Но *.sln файл создаётся, и после запуска компиляции я получил набор *.lib — файлов в директории Debug:
event.lib, event_core.lib, event_extra.lib.
| Pic1 |
| |
| |
А вот потом начались проблемы.
Никакие пляски с бубном не позволяют мне прилинковать эти библиотеки к C++ проекту.
Для полноты картины:
в моей системе путь к этим *.lib файлам — это C:\Programs\includes\libevent\lib\Debug
я засобывал их сюда:
| Pic2 |
| |
| |
и сюда:
| Pic3 |
| |
| |
и сюда:
| Pic4 |
| |
| |
и даже сюда:
| Pic5 |
| |
| |
При последней попытке создалась иллюзия того, что что то получилось. то есть проект нормально собрался. Но при запуске я мгновенно получил ошибку:
| Pic6 |
| |
| |
Потом я сделал еще две жалкие попытки разобраться:
слинковать (потому что сборка obj-файла проходит без ошибок, заметьте) под виндой из командной строки (результат — тот же, не видит библиотеки)
| Pic7 |
| |
| |
и попробовать сравнить содержимой obj — файлов, воспользовавшись под линуксом утилитой nm, а под виндой — dumpbin с опцией /symbols
Но разница слишком велика, я просто вижу в виндовом оьбъектном файле, что символ _event_init — UNDEFined.
| Pic8 |
| |
| |
В общем, я не достиг успеха.
Помогите, пожалуйста, например — подсказав, как определить магические переменные для OpenSSL (может, библиотека толькоприкинулась, что она нормально собрана?),
или попробовав у себя собрать этот проект с этой библиотекой — возможно, у вас получится.
Заранее спасибо за советы.