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 - иначе не прикрепляется.
При попытке собрать 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 исчерпанным