Ubuntu和libcap(capabilities)未定义引用

10

我正在尝试在Ubuntu 10.10上编译以下最小化的C代码:

#include <sys/capability.h>

void main(void)
{
        cap_t cap;
        cap = cap_get_proc();
}

使用 gcc -lcap test.c 命令,出现以下错误:

/tmp/ccCQFyXS.o: In function `main':
test.c:(.text+0x9): undefined reference to `cap_get_proc'
collect2: ld a retourné 1 code d'état d'exécution

我已经安装了libcap2-dev和libcap2-bin,版本为2.21

ls /lib/libcap.*
/lib/libcap.a  /lib/libcap.so  /lib/libcap.so.2  /lib/libcap.so.2.21

相同的代码使用相同的gcc命令在Arch和Gentoo上构建成功。

如何在Ubuntu上构建它?


提醒一下,你的代码在我安装了libcap-dev 2.19的64位Ubuntu 10.10上编译通过。 - NPE
3个回答

11

尝试使用gcc -Wl,--no-as-needed -lcap test.cgcc test.c -lcap
希望这可以帮助!


非常感谢!两种方法都可以,但是为什么在我的Gentoo和Arch配置中gcc -lcap test.c可以正常工作,而在Ubuntu上却不行呢? - kuroneko
1
@kuroneko:我认为链接器默认传递了“--as-needed”选项,仅在二进制文件中遇到实际使用的符号时才链接库。这样做是为了避免链接不必要的库并提高启动时间。有关此选项的使用,请参见此gentoo链接。你之前的链接方式是将库放在源代码之前,因此没有被链接。不幸的是,我找不到更多关于此的正确链接。 - another.anon.coward

3

我正在使用Ubuntu 10.04,遇到了同样的问题(文件系统中不存在sys/capability.h)。

我通过Synaptic Package Manager安装了libcap-dev包(版本1:2.17-2ubuntul),解决了这个问题。该软件包将/usr/include/sys文件夹中添加了capability.h文件。


1

对于 RHEL:

yum install libcap-devel
gcc -lcap test.c

1
对于Debian/Ubuntu系统:apt install libcap-devgcc -lcap test.c - trogper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接