繁体   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