officercat 2015-11-14 12:31 采纳率: 0%
浏览 1858
已结题

C++ berkeley db安装后编译链接的奇怪错误。

我在centos6.5上安装了berkeley db 6.1.6,是下源代码在本系统上重新编译安装的。

库如下:

ll -rt /usr/local/lib
-rwxr-xr-x 1 root root 2141065 11月 14 19:46 libdb-6.1.so
-rw-r--r-- 1 root root 929 11月 14 19:46 libdb-6.1.la
-rw-r--r-- 1 root root 3250156 11月 14 19:50 libdb-6.1.a
-rw-r--r-- 1 root root 3250156 11月 14 19:50 libdb.a
lrwxrwxrwx 1 root root 12 11月 14 19:50 libdb.so -> libdb-6.1.so
lrwxrwxrwx 1 root root 12 11月 14 19:50 libdb-6.so -> libdb-6.1.so

也运行了 ldconfig

用了document上的示例代码

#include <string.h>  
#include <db_cxx.h>
using namespace std;  
#define DESCRIPTION_SIZE 199

int main(int argc,char ** argv)
{   
         char *description = "Grocery bill.";
         float money = 122.45;
         Db my_database(NULL, 0);

            Dbt key(&money, sizeof(float));
            Dbt data(description, strlen(description) + 1);
            int ret = my_database.put(NULL, &key, &data, DB_NOOVERWRITE);
            if (ret == DB_KEYEXIST) {
                    my_database.err(ret, "Put failed because key %f already exists",money);
            }
     }

然后编译
gcc般般是4.9.2
clang++ main.cc -ldb -lpthread -o test_d -DHAVE_CXX_STDHEADERS
编译成功, 但链接错误:
[root@10-180-92-207 bigdata]# clang++ main.cc -ldb -lpthread -o test_d -DHAVE_CXX_STDHEADERS
/tmp/main-660df3.o: In function main':
main.cc:(.text+0x87): undefined reference to
Db::Db(DbEnv*, unsigned int)'
main.cc:(.text+0x9f): undefined reference to Dbt::Dbt(void*, unsigned int)'
main.cc:(.text+0xd0): undefined reference to
Dbt::Dbt(void*, unsigned int)'
main.cc:(.text+0xf9): undefined reference to Db::put(DbTxn*, Dbt*, Dbt*, unsigned int)'
main.cc:(.text+0x147): undefined reference to
Db::err(int, char const*, ...)'
main.cc:(.text+0x199): undefined reference to Dbt::Dbt()'
main.cc:(.text+0x1aa): undefined reference to
Dbt::Dbt()'
main.cc:(.text+0x242): undefined reference to Db::get(DbTxn*, Dbt*, Dbt*, unsigned int)'
main.cc:(.text+0x2ed): undefined reference to
Dbt::~Dbt()'
main.cc:(.text+0x2fe): undefined reference to Dbt::~Dbt()'
main.cc:(.text+0x30f): undefined reference to
Dbt::~Dbt()'
main.cc:(.text+0x320): undefined reference to Dbt::~Dbt()'
main.cc:(.text+0x331): undefined reference to
Db::~Db()'
main.cc:(.text+0x36c): undefined reference to Dbt::~Dbt()'
main.cc:(.text+0x382): undefined reference to
Dbt::~Dbt()'
main.cc:(.text+0x398): undefined reference to Dbt::~Dbt()'
main.cc:(.text+0x3ae): undefined reference to
Dbt::~Dbt()'
main.cc:(.text+0x3c4): undefined reference to `Db::~Db()'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这就和完全啊没装berkeleydb的库一样的报错信息。
但问题是就libdb一个库文件,我也装了,就在系统默认目录下,也ldconfig了,-ldb也用了,就算用-L再明确指一遍也不行。。。

我在另一台ubuntu14.04的电脑上重复了以上操作还是一样的问题。

这是什么鬼?装多了开源库,第一次件berkeleydb这样让我摸不着头脑的。

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-11-14 12:55
    关注

    你编译器的目录设置或者环境路径是否正确

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧