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

问题描述

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这样让我摸不着头脑的。

解决方案

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

解决方案二:

就是berkeley的db 的lib库文件没有link成功,路径对吗。

解决方案三:

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

时间: 2024-11-01 12:50:16

链接错误-C++ berkeley db安装后编译链接的奇怪错误。的相关文章

OracleXE安装后用户登录出现ORA-01089错误

问题描述 OracleXE安装后用户登录出现ORA-01089错误 解决方案 cmd sqlplus/nolog conn/as sysdba或者conn/as sys 再输密码 解决方案二: conn/as sys这个可能被改成conn/as system了,还有你需要在组策略里面有个orcXE还是啥的里面添加Administrator权限

kloxo安装后suphp模式出现服务器错误500的解决办法

经过分析出现这类问题是因为我们的php 版本过了,导致这个问题,解决办法直接把它调低版本的就可以了,具体方法如下.  代码如下 复制代码 # backup php.ini cd /etc yes | cp -rf php.ini php.ini.bck cd / # downgrade to get old version rpm -e --nodeps php rpm -e --nodeps php-cli rpm -e --nodeps php-common rpm -e --nodeps

PSIM安装出现 interal error 2932 这个错误应该怎么办

问题描述 PSIM安装出现 interal error 2932 这个错误应该怎么办 PSIM安装出现 interal error 2932 这个错误应该怎么办

bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功!

问题描述 bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! bundler 怎么在ubuntu下安装和编译 详细一点 现有教程操作完后不能成功! 解决方案 参考下http://wenku.baidu.com/link?url=NgJF6QDZ7Dnl3rLlCiWtPRP9MMnOVDhNqGkL2ceC5ZwWQ-adUTNS-Dm8mKSVtInWTnUSZfsg5dZ5E7OskbwDW7H7bp3EN9ogz8q5nDd_BgO 解决方案二: 先说说什

1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project

 使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题:   1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-XX:MaxPermSize=768m-Xms1024m-Xmx3072m搜索   二:修改window->preferences --- > JAVA->Edittor->Hovers,将右侧所有复选框清空.   2.因为eclipse上一次未正常关闭,导致启动卡死,错误日志为:

出错-vc++ 6.0开始编译链接都通过,修改后就不通过了,但是改回之后链接还是不通过?

问题描述 vc++ 6.0开始编译链接都通过,修改后就不通过了,但是改回之后链接还是不通过? void CInputDlg::OnOK() { UpdateData(); m_strName.TrimLeft(); m_strNo.TrimLeft(); if(m_strName.IsEmpty()||m_strNo.IsEmpty()) { MessageBox("姓名或者学号不能为空"); } else { data.OpenFile(); data.InsertStudent(m

关于安装opengl开发环境后编译出现“无法解析的外部符号”的问题

问题描述 关于安装opengl开发环境后编译出现"无法解析的外部符号"的问题 本人使用的是win7 64位家庭普通版系统,以及visual studio 2012,照网上说明安装了glew,freeglut,glut后 输入一段代码之后,函数什么的都可以正常变色 代码什么的都是蓝宝书上边的应该没有什么问题,粘贴一部分上来: glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPT

求助各位,VS2012 编译 C# 出现的错误,刚写好的时候可以编译,搁了一天后就编译不了了

问题描述 编译的时候提示错误:ALINK:errorAL1047:导入文件"X:XXX.XXX"时出错--试图加载格式不正确的程序.该如何解决呢? 解决方案 解决方案二:X:XXX.XXX是什么文件?解决方案三:该回复于2015-02-28 22:09:15被版主删除解决方案四:当程序编译完成关闭最后要做的一件事就是把整个工程文件夹压缩起来备份,万一有问题可以恢复.解决方案五:引用1楼findcaiyzh的回复: X:XXX.XXX是什么文件? E:ProjectC#TESTobjDe

ceph-请问对Ceph源代码的改动在重新编译安装后为何无法体现出来?

问题描述 请问对Ceph源代码的改动在重新编译安装后为何无法体现出来? 请懂Ceph的大神们帮帮忙: 我们实验室在做一个跟Ceph相关的项目,在Ubuntu 12.04的环境下,发现对于源代码的改动在重新编译安装后跟没改动一样... 具体: 在Client.cc的7988行,也就是在 client::_create() _函数中,将正在创建的文件名name赋给一个新的变量name2并对name2进行随意修改(例如尾部增加一个字符串),并且在该函数中后面引用name的地方都换成name2.然而,重