![](/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.