在ubuntu下使用gcc与intel mkl发生奇怪的链接错误

时间:2012-08-03 05:18:41

标签: gcc intel-mkl

我想在一些优化问题中使用intel mkl,所以我使用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 template

我正在使用ubuntu 12.04,gcc 4.6.3,intel composer_xe_2011_sp1.6.233。

1 个答案:

答案 0 :(得分:1)

  

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

此命令行不正确。链接行matters上的对象和库的顺序,并且它与它应该是完全相反的。在库之前移动test.o ,它将正常工作(TM)。