编译c源代码时找不到-lagent(不兼容的库)

时间:2012-01-11 01:03:59

标签: c linux gcc ubuntu compiler-errors

使用ubuntu中的gcc我使用此命令编译我的源代码:

gcc 1.c -L. -lagent -lm -lpthread -o 1

但是我收到了这个错误:

/usr/bin/ld: skipping incompatible ./libagent.so when searching for -lagent
/usr/bin/ld: cannot find -lagent
collect2: ld returned 1 exit status

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

链接器告诉您文件./libagent.so存在,但格式不合适

它可能是一个空文件,或者是为32位而不是64位构建的,或者它可能是一个指向错误版本的符号链接。

答案 1 :(得分:0)

让我们先看看你的命令行参数。

gcc 1.c -L. -lagent -lm -lpthread -o 1

使用输入源代码gcc调用编译器1.c,然后指定其他(链接)库路径以包含当前目录(.){{1} }。然后你告诉它链接代理和pthread库,其中共享(动态)库的默认名称格式为libNAME.so,其中NAME被替换为名称。静态库具有默认文件扩展名-L.(来自术语存档)。然后将输出(在本例中为可执行文件)指定为文件.a(数字1,而不是字母'ell')。

1

这是链接器(/usr/bin/ld: skipping incompatible ./libagent.so when searching for -lagent)告诉您文件./libagent.so(它可能在当前目录中找到)不是一个有效的共享库格式,正如它所期望的那样。这可能适用于不同的机器架构(x86-64,ARMle,PowerPC,MIPS)或不兼容的库格式(我不知道库文件,.so是否有ldCOFFELF依赖关系。或者仅仅是空的或损坏的(例如由于错误编译/链接而中断的输出)。

因此,您通常希望在链接器的搜索路径中包含当前目录,除非您拥有尚未安装的库的副本(通常为/ usr / lib /或/ usr / local / lib /),例如您编写了库并希望在安装之前将测试程序链接到它。

Debian和面向Unbuntu的部分答案:

通常,您希望以PE格式安装共享库的运行时组件(通常命名为libagent)和相关的开发文件(最常见的是至少一个头文件,希望是一个联机帮助页)。基于RPM的Linux系统使用libagent-dev样式命名约定(来自内存)。所以libagent-devel如果是包的名称就应该这样做。