![](/img/trans.png)
[英]Issue with rowset of boost tuples with SOCI c++ database access library
[英]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.