你如何正确安装SOCI?

Mih*_*şog 7 c++ shared-libraries soci

我正面临着一个令人讨厌的问题,这个问题一直困扰着编程.我打算开始一个个人项目,我需要使用数据库来存储某些信息,然后我决定使用SQLite,但我不喜欢C-ish API,所以我在SQLite wiki中遇到了SOCI包装器.

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

cmake -DWITH_BOOST=ON -DSOCI_TESTS=ON -DWITH_SQLITE3=ON
make
make test
sudo make install
Run Code Online (Sandbox Code Playgroud)

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

TEST.CPP:

#include "soci/soci.h"
#include "soci/sqlite3/soci-sqlite3.h"
#include <iostream>

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

    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

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

Mih*_*şog 3

我相信我已经找到问题了。做一个:

strace -e open ./1 2>&1 | grep soci
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

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
Run Code Online (Sandbox Code Playgroud)

通过查看它,您可以清楚地看到它/usr/local/lib/仅搜索,而通常它也soci_core应该搜索。soci_sqlite3解决这个问题的一个快速而肮脏的技巧是在列出的任何其他文件夹中创建一个 smylink libsoci_sqlite3.so.3.1,但我很确定有更好的方法来修复它。