2014-10-03 71 views
1

我寫了一個小c文件來測試DRMAA,但它一直告訴我我沒有定義我使用的DRMAA函數。我在C代碼中包含了drmaa.h文件。當我使用-idrmaa我得到這個錯誤:DRMAA-編譯c文件時Cant'鏈接drmaa庫

[[email protected] ~]$ cc -o drmtest -I$SGE_ROOT/include/ -ldrmaa -ldl drmtest.c 
/usr/bin/ld: cannot find -ldrmaa 

的DRMAA頭文件是在這個路徑:$ SGE_ROOT /包括/

如果我編譯文件,而不-ldrmaa我得到這個錯誤:

[[email protected] ~]$ 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; 
} 

回答

0

在第一種情況下,鏈接是你告訴它不知道在哪裏可以找到drmaa庫。在第二種情況下,由於您沒有包含drmaa庫,鏈接器告訴您它不知道如何解析正在使用的drmaa函數。

您需要確定drmaa庫文件的位置,即在哪個目錄中。

一旦你知道了,你可以在編譯/鏈接時指定-L/path/to/drmaa/directory來解決問題。

根據Brian Cain的回答,圖書館(drmaa.adrmaa.so)可能在$SGE_ROOT/lib之下。

最後,由於存儲庫的目錄不在系統的標準庫搜索路徑中,因此必須在運行可執行文件時告訴動態鏈接程序在哪裏找到庫。有兩種方法來實現這一目標:

  • 集(和出口)的PATH環境變量才能圖書館的目錄(如$SGE_ROOT/lib

  • 或編譯/鏈接時添加-R/path/to/drmaa/directory選項。

+0

感謝您的幫助,我找到的路徑,並獲得對文件進行編譯,但我得到這個錯誤: [mkatouzi @ ARGO-1〜] $ ./drmtest ./drmtest:錯誤而載入共享庫:libdrmaa.so.1。0:無法打開共享目標文件:沒有這樣的文件或目錄 [mkatouzi @ argo-1〜] $ – mkatouzi 2014-10-03 14:36:26

+0

更新瞭解決該問題的答案。 – isedev 2014-10-03 14:41:12

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 
+0

感謝您的幫助,我找到了路徑並編譯了文件,但是出現此錯誤: [mkatouzi @ argo-1〜] $ ./drmtest ./drmtest:加載共享庫時出錯:libdrmaa.so .1.0:無法打開共享目標文件:無此文件或目錄 [mkatouzi @ argo-1〜] $ – mkatouzi 2014-10-03 14:33:30