使用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
我该如何解决这个问题?
答案 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是否有ld
或COFF
或ELF
依赖关系。或者仅仅是空的或损坏的(例如由于错误编译/链接而中断的输出)。
因此,您通常希望不在链接器的搜索路径中包含当前目录,除非您拥有尚未安装的库的副本(通常为/ usr / lib /或/ usr / local / lib /),例如您编写了库并希望在安装之前将测试程序链接到它。
Debian和面向Unbuntu的部分答案:
通常,您希望以PE
格式安装共享库的运行时组件(通常命名为libagent
)和相关的开发文件(最常见的是至少一个头文件,希望是一个联机帮助页)。基于RPM的Linux系统使用libagent-dev
样式命名约定(来自内存)。所以libagent-devel
如果是包的名称就应该这样做。