Как использовать библиотеку базы данных SOCI C++?
Я пытаюсь внедрить soci в свою программу, но не знаю как. Я использую C++ в Linux, в проекте, использующем NetBeans. Я выполнил следующие шаги: http://soci.sourceforge.net/doc/structure.html чтобы установить его, и попытался скопировать файлы soci.h из / src / core и soci-mysql.h из / src / backends / mysql в моем проекте, но он дает ошибку компиляции (эти файлы включают в себя другие файлы soci, но нелогично копировать все файлы в каталог...). Я прочитал руководство несколько раз, но я не понимаю, что я делаю неправильно. Примеры включают только эти файлы.
Благодарю.
Изменить: я дал больше информации в комментарии под ответом. Я не знаю, какие шаги я должен выполнить, чтобы реализовать soci.
2 ответа
Соответствующий бит на этой странице
Когда скрипт configure запускается без параметров, оставшаяся часть процесса будет использовать
/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 отсутствует в пути поиска библиотеки дистрибутивов (см. /Etc/ld.so.conf и / или / etc / ld).so.conf.d/*) тогда он не сможет найти общую библиотеку во время выполнения. Вам нужно будет либо жестко кодировать путь к библиотеке с помощью переключателя компоновщика -rpath
или добавьте / usr / local / lib к общесистемному пути поиска, как раньше или в вашей среде (переменная LD_LIBRARY_PATH
). Я не уверен, что лучший способ сделать это - я бы предложил -rpath
чтобы вообще не изменять систему, хотя, если вы собираете много библиотек в / usr / local / lib, возможно, имеет смысл добавить ее.
Я получил то же самое , не загружает ошибку бэкенда в моей программе 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
он работает в системе (я думаю, что debian / ubuntu изменяет имя файла по сравнению с оригинальным, но у него есть побочные эффекты, потому что библиотека SOCI ищет внутри оригинальное имя).
Я нашел ошибку, используя переменную окружения bash LD_DEBUG=files
и работает мой бинарный C++.
Надеюсь, поможет.