Как правильно установить библиотеку SOCI c ++ на Windows 10? - PullRequest
1 голос
/ 11 мая 2019

Я хочу сделать кодирование базы данных на C ++. Какие современные библиотеки C ++ должны быть в моем наборе инструментов? показывает, что SOCI - это хорошая библиотека, которая является кроссплатформенной и бесплатной. Но установка SOCI является большой проблемой, так как я не могу найти хороший блог, учебник, статью или что-нибудь, что дает подробное изложение. Я следовал инструкциям на официальной странице SOCI http://soci.sourceforge.net/doc/3.2/installation.html, но после того, как успешно (вроде как он не определяет boost. Поэтому мне пришлось запускать его без boost) запустил cmake, когда я собирал .sln в visual studio, это дает мне 4 ошибки. Я пытался все в течение нескольких дней, но ничего не работает. На yt https://www.youtube.com/watch?v=gFGLKaDnwmI, есть только одно видео, но в нем показан метод, которым вы должны манипулировать микро в файлах lib. Я не хочу этого делать. И так как я думал, что это известная и популярная библиотека, мне не пришлось бы этого делать. В любом случае, сборка o / p слишком велика, поэтому я опубликовал ошибки, которые я получаю. Первый появляется три раза. Так вот почему я думаю, что получаю 4 не удалось в конечном результате.

5>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt\stdio.h(1935): fatal error C1189: #error:  Macro definition of snprintf conflicts with Standard Library function declaration

8>LINK : fatal error LNK1104: cannot open file '..\..\..\lib\Debug\libsoci_postgresql_3_2.lib'


========== Build: 8 succeeded, 4 failed, 0 up-to-date, 3 skipped ==========

У меня есть еще один вопрос, который не важен, но просто как фью (не отмечайте меня за это. Если хотите, я его удалю). Разве программирование баз данных не выполняется на С ++ так часто? или, если это сделано, кодеры c ++ предпочитают C apis больше, чем кодеры c ++? Потому что у меня были реальные проблемы с поиском хороших недавних статей или блога на эту же тему.

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Видимо, эта проблема не только с SOCIВ поисках решения я столкнулся с множеством других библиотек, у которых такая же проблема с VS17.https://github.com/robotology/icub-firmware-shared/issues/25 https://forum.juce.com/t/solved-error-with-vs2015-regarding-snprintf/14831, чтобы связать несколько.Похоже, после какой-то версии snprintf был добавлен в VS (стандартная библиотека).Так что это противоречит макросам всех библиотек, которые его используют.

Единственный способ обойти это - либо изменить имя макроса вручную (как показано на видео), либо отредактировать определения макроса (что я и сделал и предпочел, потому что он намного чище) следующим образом:

#define snprintf _snprintf

to:

#if _MSC_VER < 1900
#define snprintf _snprintf
#endif

Это избавило меня от всех моих ошибок, и решение было успешно построено без каких-либо ошибок.Я не знаю, почему обслуживающие люди не вносили изменений в саму библиотеку, чтобы избежать этого.Я надеюсь связаться с ними и попросить их сделать то же самое.

Надеюсь, это поможет всем, у кого есть подобные проблемы с любой библиотекой.

0 голосов
/ 12 мая 2019

Какую версию соц вы пытаетесь построить?Я обнаружил thread с вашей ошибкой:

Сборка завершается неудачно, потому что есть два включенных файла, которые переопределяют символ 'snprintf'.Первое определение находится в «D: \ devsrc \ soci-3.2.3 \ core \ soci-platform.h», а второе (которое выдает ошибку) находится в «C: \ Program Files (x86) \ Windows Kits \»10 \ include \ 10.0.10150.0 \ ucrt \ stdio.h "(файл стандартной библиотеки).

Чтобы исправить ошибку, прокомментируйте строку 27 в" D: \ devsrc \ soci-3.2.3 \ core ".\ soci-platform.h ":

// #define snprintf _snprintf

, так что SOCI игнорирует свое собственное определение и вместо него использует определение стандартной библиотеки.

Однако автор библиотеки заявляет:

Для записи, мне только что удалось собрать SOCI 3.2.3 с VS2015 (CL.EXE версия 19.00.24215.1) без каких-либо проблем или необходимых изменений..

git clone https://github.com/SOCI/soci.git git co release/3.2 mkdir _build cd _build cmake ..

, затем загрузите SOCI.sln с VS2015 и соберите.

Также вы можете попробовать построить master branch (aka 4.0.0 версия).

...