簡體   English   中英

如何使用SOCI C ++數據庫庫?

[英]How to use SOCI C++ Database library?

我正在嘗試在我的程序中實現社交,但我不知道如何。 我在Linux上使用C ++,在使用netbeans的項目上。 我按照以下步驟操作: http ://soci.sourceforge.net/doc/structure.html進行安裝,我嘗試從/ src / core和soci-mysql.h中復制文件soci.h / backends / mysql在我的項目中,但它給出了編譯錯誤(這些文件包括其他社會文件,但將所有文件復制到目錄中是不合邏輯的......)。 我已經讀了好幾次指南,但我不明白我做錯了什么。 示例僅包含這些文件。

謝謝。

編輯:我在答案下方的評論中提供了更多信息。 我不知道我必須遵循哪些步驟來實施社會。

該頁面上的相關位是

當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不在你的發行版庫中搜索path(請參閱/etc/ld.so.conf和/或/etc/ld.so.conf.d/*)然后它將無法在運行時找到共享庫。 您需要使用鏈接器開關-rpath對庫的路徑進行硬編碼,或者像以前或在您的環境中一樣將/ usr / local / lib添加到系統范圍的搜索路徑中(變量LD_LIBRARY_PATH )。 我不確定最好的方法是什么 - 我建議-rpath避免一般修改系統,盡管如果你在/ usr / local / lib中構建了很多庫,它可能有意義添加它。

當我執行session sql("mysql://db=...)時,我得到了相同的不會在我的C ++程序上加載后端錯誤

我找到了一個解決方案(至少在我的Ubuntu 11.04上)。 做就是了:

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

看來社會庫搜索文件中沒有的文件/usr/lib/libsoci_mysql.so ,如果你鏈接到庫/usr/lib/libsoci_mysql-gcc-3_0-3.0.0.so ,請購買它在系統中工作(我認為debian / ubuntu從原始名稱更改了文件名,但它有副作用,因為SOCI庫在里面搜索原始名稱)。

我發現錯誤使用bash環境變量LD_DEBUG=files並運行我的C ++二進制文件。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM