linux下使用OTL和UNIXODBC问题咨询

hinking 2008-11-04 10:57:11
1.测试在Linux下使用otl,所以程序里对数据库没有多少操作
testdb.cpp文件
#include <iostream>
using namespace std;

//#define OTL_ODBC
#define OTL_ODBC_MYSQL
#define OTL_ODBC_UNIX
#include "./otlv4.h"
otl_connect db;
int main()
{
// otl_connect::otl_initialize();
try
{
// db.rlogon("UID=root;PWD= ;DSN=testdb");
// cout<<"connect successful"<<endl;
}
catch (...)
{
// cout<<"error!"<<endl;
}
return 0;
}
2.使用ace里面的mpc.pl工具,所以要写mpc文件
testdb.mpc文件
project (Test_DB):aceexe{
exename = Test_DB
Source_Files{
dbtest.cpp
}
Header_Files{
otlv4.h
}
}
3.将mpc文件转成makefile文件
通过命令mpc.pl -type gnuace testdb.mpc
生成GNUmakefile.Test_DB
4.编译makefile文件
gmake -f GNUmakefile.Test_DB
出错如下:
GNUmakefile: /home/sqq/test/GNUmakefile.Test_DB MAKEFLAGS=

g++ -fvisibility=hidden -fvisibility-inlines-hidden -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/home/sqq/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I/home/sqq/ACE_wrappers -Wl,-E -L/home/sqq/ACE_wrappers/ace -L./ -L/home/sqq/ACE_wrappers/lib -L. -L/home/sqq/ACE_wrappers/lib -o test_DB .obj/dbtest.o -lACE -ldl -lpthread -lrt
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
.obj/dbtest.o: In function `otl_conn::commit()':
/home/sqq/test/./otlv4.h:9301: undefined reference to `SQLEndTran'
.obj/dbtest.o: In function `otl_conn::logoff()':
/home/sqq/test/./otlv4.h:9182: undefined reference to `SQLDisconnect'
.obj/dbtest.o: In function `otl_conn::error(otl_exc&)':
/home/sqq/test/./otlv4.h:9262: undefined reference to `SQLGetDiagRec'
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
.obj/dbtest.o:/home/sqq/test/./otlv4.h:8780: more undefined references to `SQLFreeHandle' follow
.obj/dbtest.o: In function `otl_conn::commit()':
/home/sqq/test/./otlv4.h:9301: undefined reference to `SQLEndTran'
.obj/dbtest.o: In function `otl_conn::logoff()':
/home/sqq/test/./otlv4.h:9182: undefined reference to `SQLDisconnect'
.obj/dbtest.o: In function `otl_conn::error(otl_exc&)':
/home/sqq/test/./otlv4.h:9262: undefined reference to `SQLGetDiagRec'
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
.obj/dbtest.o: In function `otl_conn::commit()':
/home/sqq/test/./otlv4.h:9301: undefined reference to `SQLEndTran'
.obj/dbtest.o: In function `otl_conn::logoff()':
/home/sqq/test/./otlv4.h:9182: undefined reference to `SQLDisconnect'
.obj/dbtest.o: In function `otl_conn::error(otl_exc&)':
/home/sqq/test/./otlv4.h:9262: undefined reference to `SQLGetDiagRec'
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
.obj/dbtest.o: In function `otl_conn::commit()':
/home/sqq/test/./otlv4.h:9301: undefined reference to `SQLEndTran'
.obj/dbtest.o: In function `otl_conn::logoff()':
/home/sqq/test/./otlv4.h:9182: undefined reference to `SQLDisconnect'
.obj/dbtest.o: In function `otl_conn::error(otl_exc&)':
/home/sqq/test/./otlv4.h:9262: undefined reference to `SQLGetDiagRec'
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
.obj/dbtest.o: In function `otl_conn::commit()':
/home/sqq/test/./otlv4.h:9301: undefined reference to `SQLEndTran'
.obj/dbtest.o: In function `otl_conn::logoff()':
/home/sqq/test/./otlv4.h:9182: undefined reference to `SQLDisconnect'
.obj/dbtest.o: In function `otl_conn::error(otl_exc&)':
/home/sqq/test/./otlv4.h:9262: undefined reference to `SQLGetDiagRec'
.obj/dbtest.o: In function `~otl_conn':
/home/sqq/test/./otlv4.h:8771: undefined reference to `SQLFreeHandle'
/home/sqq/test/./otlv4.h:8780: undefined reference to `SQLFreeHandle'
collect2: ld 返回 1
gmake: *** [test_DB] 错误 1

5.如果将testdb.cpp里的otl_connect db;一行注释掉,没有错误。
从网上找原因,有人说是少了库,所以修改mpc文件,加上了libmyodbc3和libodbc库
编译还是出相同的错。
project (Test_DB):aceexe{
exename = test_DB
lit_libs += libmyodbc3 libodbc
Source_Files{
dbtest.cpp
}
Header_Files{
otlv4.h
}
}
我安装的是unixODBC-2.2.1.tar.gz,mysql-connector_odbc-3.51.26-linux-x86-32bit.tar.gz
mysql的odbc驱动不是安装版的,通过解压后把lib目录下的文件拷到/usr/lib目录下的。
网上有人说要加载libodbc32.a、libodbccp32.a、libsqlod.a,我的机子上只有libodbc、libodbc3
没找到别的类似名字的库。
...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
display08 2012-02-01
  • 打赏
  • 举报
回复
帮UP
  • 打赏
  • 举报
回复
帮up
weir75034 2009-03-21
  • 打赏
  • 举报
回复
我也有相同的问题呀
anran2008 2008-12-10
  • 打赏
  • 举报
回复
关注一下

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧