诗岑 2023-12-08 09:20 采纳率: 93%
浏览 15
已结题

【C++】无法解析的外部符号

看了一下基本是OCI库的函数,但是OCI应该已经连上了

#include<iostream>
#include<occi.h>
#include<oci.h>

using namespace std;
using namespace oracle::occi;


int main()
{
    OCIEnv *envhp;
    OCIStmt *stmthp;
    OCIServer *srvhp;
    OCISession *sesshp; 
    OCIError *errhp;
    OCISvcCtx *svchp;

    // 申请OCI环境句柄
    int err = OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid*)0, (dvoid*(*)(dvoid*, size_t))0, (dvoid*(*)(dvoid*, dvoid*, size_t))0, (void(*)(dvoid*, dvoid*))0, (size_t)0, (dvoid**)0);

    // 申请服务句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);

    // 申请会话句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&sesshp, OCI_HTYPE_SESSION, (size_t)0, (dvoid**)0);

    // 申请语句句柄
    err = OCIHandleAlloc(envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0);

    // 设置服务名称
    const char* db_name = "orcl";
    ub4 OCI_ATTR_SERVER_NAME;
    err = OCIAttrSet(srvhp, OCI_HTYPE_SERVER, (dvoid*)db_name, strlen(db_name), OCI_ATTR_SERVER_NAME, errhp);

    // 连接数据库
    const char* user_name = "system";//连接的用户名
    const char* password = "123456";//连接的密码
    const char* dblink = 0;//连接方式
    ub4 dblink_len = 0;
    err = OCILogon2(envhp, errhp, &svchp, (CONST OraText*)user_name, strlen(user_name), (CONST OraText*)password, strlen(password), (CONST OraText*)dblink, (ub4)dblink_len, 0);

    // 执行SQL语句
    const char* sql = "select empno from emp where empno=:1";
    err = OCIStmtPrepare(stmthp, errhp, (CONST OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);

    ub2 empno = 7900;// 输入的empno
    OCIBind* bindhp;
    err = OCIBindByPos(stmthp, &bindhp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, 0, 0, OCI_DEFAULT);

    OCIDefine* dfnhp;
    ub2 out_empno;
    ub2 ind;
    ub2 out_len;
    //ERRCALL(OCIDefineByPos(stmthp, &dfnhp, errhp, 1, (dvoid*)&out_empno, sizeof(out_empno), SQLT_INT, &ind, &out_len, 0, OCI_DEFAULT));

    err = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);

    err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    while(err == OCI_SUCCESS)
    {
        cout << out_empno << endl;
        err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
    }

    // 断开连接
    OCILogoff(svchp, errhp); 
    OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
    OCIHandleFree(sesshp, OCI_HTYPE_SESSION); 
    OCIHandleFree(stmthp, OCI_HTYPE_STMT); 
    OCIHandleFree(envhp, OCI_HTYPE_ENV); 

    return 0;
}

1>3.obj : error LNK2019: 无法解析的外部符号 _OCIHandleFree,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCILogoff,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtFetch,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtExecute,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIBindByPos,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtPrepare,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCILogon2,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIAttrSet,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIHandleAlloc,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIEnvCreate,该符号在函数 _main 中被引用
1>C:\Users\Administrator\Desktop\3\Debug\3.exe : fatal error LNK1120: 10 个无法解析的外部命令

  • 写回答

2条回答 默认 最新

  • 无意识程序猿 2023-12-08 09:40
    关注

    这个只要重新生成一下就好了的

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月14日
  • 创建了问题 12月8日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行