1

DRMAA をテストするために小さな c ファイルを作成しましたが、使用した DRMAA 関数が定義されていないと表示され続けます。C コードに drmaa.h ファイルを含めました。-idrmaa を使用すると、次のエラーが発生します。

[mkatouzi@argo-1 ~]$ cc -o drmtest -I$SGE_ROOT/include/ -ldrmaa -ldl drmtest.c
/usr/bin/ld: cannot find -ldrmaa

DRMAA ヘッダー ファイルは次のパスにあります: $SGE_ROOT/include/

-ldrmaa なしでファイルをコンパイルすると、次のエラーが発生します。

[mkatouzi@argo-1 ~]$ cc -o drmtest -I$SGE_ROOT/include/  drmtest.c
/tmp/cclsPr9O.o: In function `main':
drmtest.c:(.text+0x3c): undefined reference to `drmaa_init'
drmtest.c:(.text+0x83): undefined reference to `drmaa_exit'
collect2: ld returned 1 exit status

私は学校の UNIX システムを使用していますが、非常に慣れていません。誰でもこれで私を助けることができますか?

これは私の drmtest.c ファイルです:

#include <stdio.h>
#include "drmaa.h"


int main (int argc, char **argv) {


char error[DRMAA_ERROR_STRING_BUFFER];
int errnum = 0;
errnum = drmaa_init (argv[0], error, DRMAA_ERROR_STRING_BUFFER);
if (errnum != DRMAA_ERRNO_SUCCESS) {
    fprintf (stderr, "Couldn't init DRMAA library: %s\n", error);
return 1; }
/* Do Stuff */
errnum = drmaa_exit (error, DRMAA_ERROR_STRING_BUFFER);
if (errnum != DRMAA_ERRNO_SUCCESS) {
    fprintf (stderr, "Couldn't exit DRMAA library: %s\n", error); 
return 1; }
return 0;
}
4

2 に答える 2

0

最初のケースでは、リンカーは、ライブラリの場所がわからないことを伝えていdrmaaます。2 番目のケースでは、ライブラリをインクルードしていないため、リンカーは、使用している関数drmaaを解決する方法がわからないことを通知しています。drmaa

drmaaライブラリ ファイルがどこにあるか、つまりどのディレクトリにあるかを把握する必要があります。

それがわかったら-L/path/to/drmaa/directory、問題を解決するためにコンパイル/リンクするときに指定できます。

ブライアン・ケインの答えによると、ライブラリ(drmaa.aまたはdrmaa.so)はおそらく下にあり$SGE_ROOT/libます。

最後に、ライブラリが保存されているディレクトリはシステムの標準ライブラリ検索パスにないため、実行可能ファイルを実行するときにライブラリの場所をダイナミック リンカーに指示する必要があります。これを実現するには、次の 2 つの方法があります。

  • LD_LIBRARY_PATH 環境変数をライブラリのディレクトリに設定 (およびエクスポート) します (例: $SGE_ROOT/lib)

  • または-R/path/to/drmaa/directory、コンパイル/リンク時にオプションを追加します。

于 2014-10-03T14:14:44.840 に答える
0

が見つかるライブラリ パスを指定する必要がある可能性がありますlibdrmaa.so

例えば

cc -o drmtest -I$SGE_ROOT/include/ -L$SGE_ROOT/lib/ -ldrmaa -ldl drmtest.c

ライブラリへのリンクで実行時の問題が発生した場合は、システム構成を確認する必要があります。

環境変数はLD_LIBRARY_PATHピンチで使用できますが、多くの最新のシステムではld.so.conf.

例えば

echo <<EOF > /etc/ld.so.conf.d/sge.conf
/usr/sge/lib
EOF
于 2014-10-03T14:15:34.187 に答える