2014-10-03 7 views
1

Я написал небольшой файл c для тестирования DRMAA, но он продолжает говорить мне, что функции DRMAA, которые я использовал, не определены. Я включил файл drmaa.h в код C. Когда я использую -idrmaa я получаю эту ошибку:DRMAA- Cant 'link библиотека drmaa при компиляции c file

[[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 при компиляции/связывании для решения проблемы.

В соответствии с ответом Брайана Каина библиотека (drmaa.a или drmaa.so), вероятно, находится под $SGE_ROOT/lib.

Наконец, поскольку каталог, в котором хранится библиотека, не находится в пути поиска стандартной библиотеки в системе, вы должны сообщить динамическому компоновщику, где найти библиотеку при запуске исполняемого файла. Есть два способа для достижения этой цели:

  • Set (и экспорт) LD_LIBRARY_PATH переменных окружений в каталог библиотеки (например, $SGE_ROOT/lib)

  • Или добавить опцию -R/path/to/drmaa/directory при компиляции/компоновке.

+0

Спасибо за помощь, я нашел путь и добрался до компиляции файла, но я получаю эту ошибку: [mkatouzi @ Арго-1 ~] $ ./drmtest ./drmtest: ошибка при загрузке разделяемых библиотек : libdrmaa.so.1.0: невозможно открыть файл общего объекта: нет такого файла или каталога [mkatouzi @ argo-1 ~] $ – mkatouzi

+0

Обновленный ответ на адрес, который тоже выдает. – isedev

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

 Смежные вопросы

  • Нет связанных вопросов^_^