imnetcat/cout

compiler - linker flags?

Closed this issue · 7 comments

Здравствуйте.

Видимо, я первый, кто начал активно пользоваться Вашим проектом, поэтому у меня есть несколько вопросов.

я не очень опытный в C++, и, возможно, я задаю глупый вопорос.

Нельзя ли куда нибудь в документацию добавить пример команды сборки проекта для какого нибудь компилятора? С указанием нужных библиотек.

Вопрос вызван вот чем. При попытке собрать простой пример с отправкой письма компиляция проходит без проблем, а при линковке возникают многочисленные ошибки вида " undefined reference to 'Protocol::SMTP::MAIL::AddRecipient()'" и т.п. - все на Protocol::SMTP::MAIL

Собираю под Windows 10 x64, пользуюсь компилятором gcc из пакета msys2, команда сборки выглядит так:

g++.exe -std=c++17 -lssl-1_1-x64 -lcrypto-1_1-x64 -LC:/Programs/msys64/mingw64/bin/ -g test_mail.cpp -o test_mail.exe

Посмотрите, возможно, я просто что то не так делаю прии сборке.

Собирал код из ветки master.

Прикреплаю файлы с примером программы (там только пароль заменен на звездочки) и файл с ошибками при сборке.
Файлу с примером программы пришлось приписать расширение .txt - иначе не прикрепляется.

test_mail.cpp.txt
errors.txt

При попытке собрать main.cpp ошибки такие же.

Буду благодарен за любую помощь.

С понедельника пытаюсь научиться отправлять письма из своей программы :-)

Спасибо заранее.

Связаться со мной можно по mail junecat@mail.ru

Рад что вы всё ещё не сдались в попытках использовать мой проект)
Я оставлял ремарку в вики и в ридми проекта о том что компилировать желательно в Visual Studio, так как я не проверял насколько всё правильно компилируется и работает с mingw. Но насколько я вижу по вашей ошибке проблема линковки возникает с моей стороны
попробуйте добавить
#include "protocol/smtp/mail/mail.h"
перед
#include "protocol/smtp/client.h"

отпишитесь потом

У вас прекрасная поддержка проекта :-)

всем бы так.

Сейчас попробую, правильно я понимаю, что библиотек crypt32, libcrypto64MTd и libssl64MTd (ну, и заголовочных файлов от openssl) должно быть достаточно для сборки проекта?

Спасибо.

Я просто рад и приятно удивлён что мой код действительно кому-то нужен :0
Да, вы правильно поняли

Спасибо за ответ.

я заранее прошу прощения, что дальше "многобукв", я надеюсь, что мой комментарий будет полезен.

Ваш проект очень интересен, так как нет ни одного общеизвестного проекта кроссплатформенной заголовочной библиотеки для отправки email. Наиболее известна https://github.com/karastojko/mailio, но она требует boost, а boost - это просто монстр.

К сожалению, я столкнулся с такой трудностью:

ок, с тем, как линковать libssl - я разобрался благодаря stackoverflow.

Когда c этим справился - стал получать при попытке собрать свою тестовую программу ошибки линковки, точно такие же, как в том файле, который я уже присылал.

Но теперь я посмотрел на эти ошибки более внимательно. Они все вида "undefined reference to Protocol::SMTP::Client::SetServer", "undefined reference to Protocol::SMTP::Client::SetPassword" и т.п. - то есть, я просто не все файлы включаю в команду сборки проекта!

И тут мы подходим к самому интересному.

Вы собираете проект при помощи VS, она умная, и все действия с компилятором происходят у неё "в кишочках".

Я собираю проект из командной строки, командой

g++.exe -std=c++17 -static -g test_mail.cpp -lssl -lcrypto -lws2_32 -lgdi32 -lcrypt32 -o test_mail.exe

и в эту команду мне нужно после "test_mail.cpp" добавить все остальные фалы Вашего проекта, иначе не слинкуется.

А я их не знаю, они содержатся в проекте *.vcproj, котрый не включен в github - репозиторий (и это, наверное, правильно, если Вы хотите, чтобю Ваш проект собирался не только студией)

Кроме того, если я использую Ваш проект именно как header-only library, добавлять эти файлы не очень удобно: в идеале хотелось бы просто включить что то инклудом, и получить нужную функциональность.

Очень интеерсное решение этой проблемы я встречал в таком проекте: https://github.com/nlohmann/json
Это header-only json library, и у неё есть как бы две версии: одна - девелоперская, где код разбит на файлы, разложенные по папкам. Вторая - то, что нужно "просто подключить": это один файл https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp в который включен весь код.

я думаю, у парня используется какая то специальная система сборки, которая это файл делает из всех остальных файлов проекта.

Теперь о пожелании: не могли бы вы в wiki просто перечислить файлы проекта? Можно даже просто добавить картинку открытой студии, где они все видны.

Надеюсь, я вас не огорчил.

Успехов!

точно, вы правы
cpp файлов в проекте довольно много, думаю вам стоит подождать релиза
вы меня вдохновили, так что я на выходных займусь этим проектом, и соберу релиз как раз как nlohmann собрал свой релиз json - так и хотел сделать самого начала

пре-релиз готов
вики опять отчасти устарела, поскольку я поменял архитектуру приложения
обновил и исправил немного пример и добавил два примера попроще в [папке examples] (https://github.com/imnetcat/cout/examples) что бы и без вики пока что можно было разобраться
Стоит отметить что теперь для релизной версии требуются релизные версии библиотек OpenSSL:
libcrypto64MT.lib
libssl64MT.lib
а для дебаг версии - дебаг версии библиотек соответсвено
libcrypto64MTd.lib
libssl64MTd.lib

crypt32.lib никуда не делась, так и осталась

кстати прежде чем использовать мой фреймворк стоит разрешить "доступ к аккаунту из неизвестных приложений" в настройках аккаунта электронной почты

Если снова появятся проблемы - откроем снова, а пока считаю этот issue исчерпанным