我正面临着一个恼人的问题,这个问题已经阻碍了我一段时间的编程。我打算开始一个个人项目,在这个项目中我需要使用数据库来存储某些信息,我决定使用SQLite,但是我不喜欢C-ish API,所以我在SQLite维基中遇到了SOCI包装器。
我去了SOCI官方网站,阅读了文档,决定试一试。我按照文档“安装”一章中的说明进行了操作,在安装完所有要求后,我编译并安装了:
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:
#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,我可以清楚地看到共享库已经安装。
发布于 2011-12-13 01:22:25
我相信我已经找到了问题所在。执行以下操作:
strace -e open ./1 2>&1 | grep soci输出以下内容:
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的简单链接,但我非常确定有更好的方法来解决它。
发布于 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/
https://stackoverflow.com/questions/8467136
复制相似问题