1

いくつかの最適化の問題でintelmklを使用したいので、intelの例を使用してテストします。test.cpp:

    #include <mkl.h>
    #include <stdio.h>
    typedef struct {
        double re;
        double im;
    } complex16;

    extern "C" void cblas_zdotc_sub(int, const void*, int, const void*, int, void*);

    #define N 5

    int main()
    {
        int n, inca = 1, incb = 1, i;
        complex16 a[N], b[N], c;
        n = N;

        for(i = 0; i < n; i++) {
            a[i].re = (double)i;
            a[i].im = (double)i * 2.0;
            b[i].re = (double)(n - i);
            b[i].im = (double)i * 2.0;
        }

        cblas_zdotc_sub(n, (void*)a, inca, (void*)b, incb, (void *)&c);
        printf("The complex dot product is: ( %6.2f, %6.2f) ", c.re, c.im);
        return 0;
    }

"g ++ -I / home / l / intel / mkl / include -w test.cpp --L" /home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64 "" / home /l/でコンパイルするとintel / composer_xe_2011_sp1.6.233 / mkl / lib / intel64 "/libmkl_intel_lp64.a -Wl、--start-group" /home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64 "/libmkl_intel_thread.a" / home / l / intel / composer_xe_2011_sp1.6.233 / mkl / lib / intel64 "/libmkl_core.a -Wl、-end-group -L" /home/l/intel/composer_xe_2011_sp1.6.233/mkl/../compiler/lib/intel64 「-liomp5-lpthread-lm-L / home / l / intel / mkl / lib / intel64 -o template」、すべて問題ありません...

しかし、コンパイルステップとリンクステップを分離すると、リンクエラーが発生しました。

test.cpp:(。text + 0x10b):`cblas_zdotc_sub'への未定義の参照

コンパイルとリンクに使用したコマンドは次のとおりです。

コンパイル:

g ++ -I / home / l / intel / mkl / include -w -c test.cpp -o test.o

リンク:

g ++ -I / home / l / intel / mkl / include -w -L "/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64" "/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib /intel64 "/libmkl_intel_lp64.a -Wl、--start-group" /home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64 "/libmkl_intel_thread.a" /home/l/intel/composer_xe_2011_sp1.6.233/mkl /lib/intel64"/libmkl_core.a -Wl、--end-group -L "/home/l/intel/composer_xe_2011_sp1.6.233/mkl/../compiler/lib/intel64" -liomp5 -lpthread -lm ./ test.o -L / home / l / intel / mkl / lib /intel64-oテンプレート

私はubuntu12.04、gcc 4.6.3、intelcomposer_xe_2011_sp1.6.233を使用しています。

4

1 に答える 1

1

g ++ ... "/home/l/intel/composer_xe_2011_sp1.6.233/mkl/lib/intel64" /libmkl_intel_lp64.a ... -liomp5 -lpthread -lm./test.o..。

このコマンドラインが正しくありません。リンクライン上のオブジェクトとライブラリの順序は重要であり、本来あるべきものとは正反対になります。test.o ライブラリの前に移動すると、正常に機能します(TM)。

于 2012-08-06T00:26:45.093 に答える