首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确安装SOCI?

如何正确安装SOCI?
EN

Stack Overflow用户
提问于 2011-12-12 04:18:02
回答 2查看 3.7K关注 0票数 7

我正面临着一个恼人的问题,这个问题已经阻碍了我一段时间的编程。我打算开始一个个人项目,在这个项目中我需要使用数据库来存储某些信息,我决定使用SQLite,但是我不喜欢C-ish API,所以我在SQLite维基中遇到了SOCI包装器。

我去了SOCI官方网站,阅读了文档,决定试一试。我按照文档“安装”一章中的说明进行了操作,在安装完所有要求后,我编译并安装了:

代码语言:javascript
复制
cmake -DWITH_BOOST=ON -DSOCI_TESTS=ON -DWITH_SQLITE3=ON
make
make test
sudo make install

但是,当尝试运行(在使用g++ test.cpp -o1 -lsoci_core -lsoci_sqlite3编译之后)这样的程序时,所有测试都已成功完成:

test.cpp:

代码语言:javascript
复制
#include "soci/soci.h"
#include "soci/sqlite3/soci-sqlite3.h"
#include <iostream>

int main()
{
    soci::session sql(soci::sqlite3, "testdb.db");

    return 0;    
}

我收到一条错误消息:“加载共享库时出错: libsoci_sqlite3.so.3.1:无法打开共享对象文件:没有这样的文件或目录。”但是查看install log,我可以清楚地看到共享库已经安装。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 01:22:25

我相信我已经找到了问题所在。执行以下操作:

代码语言:javascript
复制
strace -e open ./1 2>&1 | grep soci

输出以下内容:

代码语言:javascript
复制
open("/usr/local/lib/libsoci_core.so.3.1", O_RDONLY) = 3
open("/lib/x86_64-linux-gnu/tls/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/tls/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libsoci_sqlite3.so.3.1", O_RDONLY) = -1 ENOENT (No such file or directory)
./1: error while loading shared libraries: libsoci_sqlite3.so.3.1: cannot open shared object file: No such file or directory

通过查看它,您可以清楚地看到它只在/usr/local/lib/中搜索soci_core,而通常情况下,它也应该搜索soci_sqlite3。解决这个问题的一个快速而肮脏的方法是在列表中列出的任何其他文件夹中创建一个指向libsoci_sqlite3.so.3.1的简单链接,但我非常确定有更好的方法来解决它。

票数 3
EN

Stack Overflow用户

发布于 2014-06-01 14:52:57

在您的SOCI上,安装库位于/usr/local/lib64/

下面的语句应该可以工作:

本地test.cpp -o测试-I/usr/local/include/soci -L/usr/local/lib64/ -lsoci_core -lsoci_sqlite3 \

-Wl,-r路径=/usr/本地/lib64/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8467136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档