• CLAPACK动态调用


    http://blog.csdn.net/silyvin/article/details/9104463

    在VS中用CLAPACK解决广义特征值问题

    中介绍了CLAPACK静态链接库,供C++调用,这里再介绍以DLL形式完成调用的方式。


    打开解决方案,在项目lapack中寻找dggev_,确认该函数

    修改项目——属性——常规——配置类型——动态库(.dll)

    属性——c/c++——代码生成——我这里用MTd,避免运行库在其他机器上缺失,在此过程中可能需要首先编译blas、f2c、tmglib为静态链接库以供lapack链接

    出现链接错误,暴力忽略——属性——链接——输入——忽略库libcmtd.lib


    还需要一个导出函数的声明


    右键项目,新建一个def文件,写入:

    LIBRARY    "lapack"
    EXPORTS  
        dggev_ @ 1  


    设置dll的导出函数。


    在主调项目中,

    属性——链接器——输入——附加依赖性:libf2cd.lib blasd.lib lapackd.lib tmglibd.lib  ——  全部删除

    属性——链接器——常规——附加库目录:可删除

    extern "C" int dggev_(char *jobvl, char *jobvr, integer *n, doublereal *  
                                a, integer *lda, doublereal *b, integer *ldb, doublereal *alphar,   
                                doublereal *alphai, doublereal *beta, doublereal *vl, integer *ldvl,   
                                doublereal *vr, integer *ldvr, doublereal *work, integer *lwork,   
                                integer *info);  

    此段声明亦删除 ,虽然不进行调用不会造成链接错误。


    然后用动态调用方式调用dll中函数,

    	HMODULE hHandleLapack = LoadLibrary("lapack.dll");
    	PDGGEV pDGGEV = (PDGGEV)GetProcAddress(hHandleLapack, "dggev_");
    
    //	dggev_(&JOBU, &JOBVT, &N, &tempA[0], &N, &tempB[0], &N, alphar, alphai, beta, vl, &N, vr, &N,wk, &LWORK, &INFO);
    	pDGGEV(&JOBU, &JOBVT, &N, &tempA[0], &N, &tempB[0], &N, alphar, alphai, beta, vl, &N, vr, &N,wk, &LWORK, &INFO);
    
    	FreeLibrary(hHandleLapack);

    PDGGEV pDGGEV = (PDGGEV)GetProcAddress(hHandleLapack, "dggev_");

    也可以:

    PDGGEV pDGGEV = (PDGGEV)GetProcAddress(hHandleLapack, "1");

  • 相关阅读:
    webstorm 自定义代码模板
    HTML5 manifest ApplicationCache
    WebStorm 快捷键收藏
    函数内巧用注释实现多行文本拼接
    图片剪裁上传插件
    将json转为复杂url参数
    CSS3实现半像素边框
    打造自己的3D全景漫游
    自适应rem布局
    header页头内容整理
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106884.html
Copyright © 2020-2023  润新知