亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3335 | 回復(fù): 6
打印 上一主題 下一主題

動態(tài)調(diào)用中提示未打開數(shù)據(jù)庫 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-03-12 10:33 |只看該作者 |倒序?yàn)g覽
我在AIX系統(tǒng)下主程序通過dlopen的方式動態(tài)調(diào)用子程序,主程序中打開了數(shù)據(jù)庫,
如果將dlopen所在的函數(shù)編譯成動態(tài)庫,子程序能正常運(yùn)行。
如果將dlopen所在函數(shù)編譯成靜態(tài)庫,子程序中訪問數(shù)據(jù)庫報(bào)未打開數(shù)據(jù)庫。
不知道是編譯參數(shù)少了還是其他什么原因,請指教。
程序如下:

main.ec

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <dlfcn.h>

EXEC SQL include sqlca;

#ifndef        SQLCODE
#define        SQLCODE        sqlca.sqlcode
#endif

int main()
{
EXEC SQL BEGIN DECLARE SECTION;
        char        *dbname;
        char        s_rq[9];
EXEC SQL  END  DECLARE SECTION;

        dbname = getenv("DBNAME");

        EXEC SQL DATABASE :dbname;
        if( SQLCODE ) {
                printf("[%s-%d] [%d]\n",__FILE__,__LINE__,SQLCODE);
                exit (-1);
        }

        EXEC SQL SELECT rq INTO :s_rq FROM table1;
        if( SQLCODE ) {
                printf("[%s-%d] [%d]\n",__FILE__,__LINE__,SQLCODE);
                exit (-1);
        }
        printf("In main rq:[%s]\n",s_rq);

        dllcall("libmytest.so","getrq");

        EXEC SQL CLOSE DATABASE;
        exit (0);
}

getrq.ec

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

EXEC SQL include sqlca;

int getrq()
{
EXEC SQL BEGIN DECLARE SECTION;
        char        s_rq[9];
EXEC SQL  END  DECLARE SECTION;

        bzero(s_rq,sizeof(s_rq));
        EXEC SQL SELECT rq INTO :s_rq FROM table1;
        if( SQLCODE ) {
                printf("[%s-%d] [%d]\n",__FILE__,__LINE__,SQLCODE);
                return -1;
        }
        printf("In getrq: RQ:[%s]\n",s_rq);
        return 0;
}


dllcall.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <dlfcn.h>

int dllcall( char *dllname, char *funname )
{
        void    *handle;
        int     (*func)();
        int                ret;

        if( (handle=dlopen(dllname,RTLD_LAZY)) == NULL ) {
                printf("打開動態(tài)庫失敗!\n");
                return (-1);
        }

        if( (func = (int (*)())dlsym(handle,funname)) == NULL ) {
                printf("打開函數(shù)失敗!\n");
                return (-1);
        }

        ret = func();

        dlclose(handle);

        return ret;
}

makefile

all: libmytest.so libdll_a.a libdll.so a b

libdll.so:dlldrv.o
        cc -G -bexpall -bnoentry -o $@ dlldrv.o

libdll_a.a:dlldrv.o
        ar -urv $@ dlldrv.o

libmytest.so:getrq.o
        esql -G -bexpall -bnoentry -o $@ getrq.o

a:main.o
        esql -O -o $@ main.o -L. -ldll_a

b:main.o
        esql -brtl -O -o $@ main.o -L. -ldll

.SUFFIXES:.o .c .ec
.c.o:
        cc -g -c $<

.ec.o:
        esql -g -c $<
        rm -f $*.c

clean:
        rm -f a b *.so *.a *.o


編譯后的執(zhí)行程序
a是通過靜態(tài)庫調(diào)用的
執(zhí)行結(jié)果:
In main rq:[20130107]
[getrq.ec-16] [-349]

finderr 349
-349   Database not selected yet.

b是通過動態(tài)庫調(diào)用的
執(zhí)行結(jié)果:
In main rq:[20130107]
In getrq: RQ:[20130107]


哪位大俠指教下。謝謝!

論壇徽章:
11
金牛座
日期:2015-03-19 16:56:22數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-02 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-04-24 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-02-03 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-08-06 06:20:00季節(jié)之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-18 06:20:00
2 [報(bào)告]
發(fā)表于 2013-03-12 15:36 |只看該作者
debug個,print一下連接數(shù)據(jù)庫。。。。。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-03-12 17:09 |只看該作者
回復(fù) 1# happer_xc


    線程中數(shù)據(jù)庫的鏈接資源是共享的,進(jìn)程就得重新鏈接了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-03-13 10:31 |只看該作者
調(diào)用靜態(tài)庫就是起新的進(jìn)程了嗎? 感覺不是這樣的

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-03-13 16:24 |只看該作者
回復(fù) 4# happer_xc


    不是庫的問題,是dlopen的原因吧?靜態(tài)庫在編譯的時候已經(jīng)收集到執(zhí)行程序里了。你試試把dlopen直接寫到main里,我估計(jì)也一樣。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-03-13 21:37 |只看該作者
回復(fù) 5# 3sane


    是的,編在main函數(shù)里也是一樣。

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:15數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-02-25 06:20:00
7 [報(bào)告]
發(fā)表于 2013-03-15 10:21 |只看該作者
建議用connect/disconnent代替database/close database
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP