Как использовать библиотеку базы данных SOCI C ++? - PullRequest
9 голосов
/ 31 декабря 2010

Я пытаюсь внедрить soci в мою программу, но не знаю как.Я использую C ++ в Linux, в проекте, использующем NetBeans.Я выполнил следующие шаги: http://soci.sourceforge.net/doc/structure.html, чтобы установить его, и я попытался скопировать файлы soci.h из / src / core и soci-mysql.h из / src / backends / mysql в моем проекте, но этовыдает ошибку компиляции (эти файлы включают другие файлы soci, но нелогично копировать все файлы в каталог ...).Я прочитал руководство несколько раз, но я не понимаю, что я делаю неправильно.Примеры включают только эти файлы.

Спасибо.

Редактировать: Я дал больше информации в комментарии под ответом.Я не знаю, какие шаги я должен выполнить, чтобы реализовать soci.

Ответы [ 2 ]

7 голосов
/ 03 января 2011

Соответствующий бит на этой странице -

Когда сценарий настройки запускается без параметров, оставшаяся часть процесса будет использовать /usr/local/include/soci в качестве места назначения по умолчанию для файлов заголовков SOCI и /usr/local/lib в качестве места назначения по умолчанию для файлов библиотеки

Теперь / usr / local / include должен быть в вашем пути включения по умолчанию (например, попробуйте что-то вроде gcc -c -v -x c++ /dev/null -o /dev/null, чтобы увидеть список, используемый вашей установкой), и вы можете включить их, используя

#include <soci/soci.h>
#include <soci/soci-mysql.h>

Затем вам нужно добавить библиотеки к шагу ссылки. Похоже, у вас будут как статические, так и общие версии библиотек. Вам нужно будет добавить -lsoci_core -lsoci_mysql к шагу ссылки; однако, если это не сработает, вам также понадобится указать / usr / local / lib в качестве каталога поиска, т.е. -L/usr/local/lib -lsoci_core -lsoci_mysql. (Опять же, это, вероятно, уже есть, но вы можете увидеть, используя gcc -print-search-dirs.) Однако проблема в том, что если вы используете общую версию, а / usr / local / lib не находится в пути поиска библиотеки дистрибутивов (см. / и т.д. / ld.so.conf и / или /etc/ld.so.conf.d/*), тогда он не сможет найти общую библиотеку во время выполнения. Вам потребуется либо жестко кодировать путь к библиотеке с помощью переключателя компоновщика -rpath, либо добавить / usr / local / lib к общесистемному пути поиска, как раньше, или в своей среде (переменная LD_LIBRARY_PATH). Я не уверен, что лучший способ сделать это - я бы предложил -rpath, чтобы вообще не изменять систему, хотя, если вы собираете много библиотек в / usr / local / lib, это может иметь смысл добавить его.

2 голосов
/ 29 ноября 2011

Я получил ту же ошибку не загружает бэкэнд в моей программе на C ++ при выполнении session sql("mysql://db=...)

Я нашел решение (по крайней мере, на моем Ubuntu 11.04). Просто сделай:

sudo -i ln -s /usr/lib/libsoci_mysql-gcc-3_0-3.0.0.so /usr/lib/libsoci_mysql.so

Похоже, что библиотека SOCI ищет файл /usr/lib/libsoci_mysql.so, который не находится в системе, купите, если вы сделаете ссылку на библиотеку /usr/lib/libsoci_mysql-gcc-3_0-3.0.0.so, что она находится в системе, которая работает (я думаю, что имя файла изменяется по сравнению с исходным именем, но оно имеет побочные эффекты, поскольку библиотека SOCI ищет внутри оригинальное имя).

Я нашел ошибку, используя переменную окружения bash LD_DEBUG=files и запустив бинарный файл C ++.

Надеюсь, это поможет.

...