首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DRMAA- Cant在编译c文件时的链接drmaa库

DRMAA- Cant在编译c文件时的链接drmaa库
EN

Stack Overflow用户
提问于 2014-10-03 14:11:34
回答 2查看 276关注 0票数 1

我编写了一个小的c文件来测试DRMAA,但是它一直告诉我,我使用的DRMAA函数没有定义。我在C代码中包含了drmaa.h文件。当我使用-idrmaa时,我会得到以下错误:

代码语言:javascript
复制
[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编译文件,则会得到以下错误:

代码语言:javascript
复制
[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文件:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-03 14:14:44

在第一种情况下,链接器是您告诉它不知道在哪里找到drmaa库。在第二种情况下,由于您没有包含drmaa库,链接器告诉您它不知道如何解析正在使用的drmaa函数。

您需要知道drmaa库文件在哪里,即在哪个目录中。

一旦知道了这一点,就可以在编译/链接以解决问题时指定-L/path/to/drmaa/directory

根据Brian的回答,库(drmaa.adrmaa.so)可能在$SGE_ROOT/lib下。

最后,由于存储库的目录不在系统的标准库搜索路径中,所以在运行可执行文件时必须告诉动态链接器在哪里找到库。实现这一目标有两种方法:

  • 将LD_LIBRARY_PATH环境变量设置(并导出)到库的目录(例如,$SGE_ROOT/lib)
  • 或者在编译/链接时添加-R/path/to/drmaa/directory选项。
票数 0
EN

Stack Overflow用户

发布于 2014-10-03 14:15:34

您可能需要指定找到libdrmaa.so的库路径。

例如:

代码语言:javascript
复制
cc -o drmtest -I$SGE_ROOT/include/ -L$SGE_ROOT/lib/ -ldrmaa -ldl drmtest.c

如果遇到针对库的运行时问题,应检查系统配置。

LD_LIBRARY_PATH环境变量可以在紧急情况下使用,但在许多现代系统中,您可以/应该使用ld.so.conf

例如:

代码语言:javascript
复制
echo <<EOF > /etc/ld.so.conf.d/sge.conf
/usr/sge/lib
EOF
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26180577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档