[英]Cannot find -lagent when compiling c source code (incompatible library)
在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
我该如何解决?
链接器告诉您./libagent.so
文件存在,但格式不正确 。
它可能是一个空文件,或者是为32位而不是64位构建的,或者它可能是指向错误版本的符号链接。
首先让我们看看您的命令行参数。
gcc 1.c -L. -lagent -lm -lpthread -o 1
您使用输入源代码1.c
调用编译器gcc
,然后指定其他(链接)库路径以包含当前目录( .
)- -L.
。 然后,您告诉它链接到代理和pthread库,共享(动态)库的默认名称格式为libNAME.so,其中NAME被替换为名称。 静态库具有默认文件扩展名.a
(来自术语archive )。 然后,将输出(在这种情况下是可执行的)指定为文件1
(数字1,而不是字母“ ell”)。
/usr/bin/ld: skipping incompatible ./libagent.so when searching for -lagent
这是链接程序( ld
),告诉您./libagent.so文件(可能在当前目录中找到)不是预期的有效共享库格式。 这可能适用于不同的计算机体系结构(x86-64,ARMle,PowerPC,MIPS)或不兼容的库格式(我不知道库文件.so是否具有COFF
或ELF
或PE
依赖项)。 或者只是因为其他原因而变空或损坏(例如,由于编译/链接错误而导致输出中断)。
因此,通常, 除非您拥有尚未安装的库的副本(通常是/ usr / lib /或/ usr / local / lib /), 否则通常不要在链接程序的搜索路径中包括当前目录。您编写了该库,并希望在安装它之前将测试程序链接到它。
面向Debian和Unbuntu的部分答案:
通常,您需要以libagent-dev
格式安装共享库的运行时组件(通常命名为libagent
类的libagent
)和相关的开发文件(通常至少是一个头文件,并希望有一个联机帮助页)。 基于RPM的Linux系统使用libagent-devel
样式命名约定(来自内存)。 因此,如果这是软件包的名称,那么sudo aptitude install libagent-dev
应该可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.