【问题标题】:ubuntu and libcap (capabilities) undefined referenceubuntu 和 libcap(功能)未定义参考
【发布时间】:2012-01-10 10:09:01
【问题描述】:

我正在尝试在 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 上?

【问题讨论】:

  • 仅供参考,您的代码在我的 64 位 Ubuntu 10.10 机器上构建良好(安装了 libcap-dev 2.19)。

标签: c ubuntu undefined-reference linux-capabilities


【解决方案1】:

试试gcc -Wl,--no-as-needed -lcap test.cgcc test.c -lcap
希望这会有所帮助!

【讨论】:

  • 非常感谢!两者都可以正常工作,但为什么 gcc -lcap test.c 对我的 gentoo 和 arch 配置工作正常,但对 ubuntu 却不行?
  • @kuroneko:我认为链接器--as-needed 是默认传递选项,该选项仅在遇到二进制文件中实际使用的符号时才链接库。这样做是为了避免链接不必要的库并缩短启动时间。有关此选项的使用,请参阅this gentoo link。您链接的方式,库在源之前,因此没有被链接。不幸的是,我无法找到包含更多信息的正确链接。
【解决方案2】:

我正在使用 Ubuntu 10.04 并且遇到了同样的问题 (sys/capability.h not present on the file system)。

我通过 Synaptic 包管理器安装包 libcap-dev(版本 1:2.17-2ubuntul)解决了这个问题,该包使用capability.h 文件填充/usr/include/sys 文件夹。

【讨论】:

    【解决方案3】:

    对于 RHEL:

    yum install libcap-devel
    gcc -lcap test.c
    

    【讨论】:

    • 对于 Debian/Ubuntu:apt install libcap-devgcc -lcap test.c
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2019-10-25
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多