2011-12-01 112 views
4

我試圖編譯在Ubuntu 10.10以下最低的C代碼:Ubuntu和的libcap(功能)未定義參考

#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上構建呢?

+0

僅供參考,您的代碼編譯罰款,我的64位的Ubuntu 10.10箱(帶'的libcap-dev'安裝2.19)。 – NPE

回答

3

嘗試gcc -Wl,--no-as-needed -lcap test.cgcc test.c -lcap
希望這有助於!

+0

非常感謝!兩者都可以正常工作,但爲什麼'gcc -lcap test.c'對我的gentoo和arch配置工作正常,但對於ubuntu不行? – kuroneko

+1

@kuroneko:我認爲鏈接器「--as-needed」是默認傳遞的選項,它只在遇到在二進制文件中有效使用的符號時鏈接庫。這樣做是爲了避免鏈接不必要的庫並改善啓動時間。查看[這個gentoo鏈接](http://www.gentoo.org/proj/en/qa/asneeded.xml)關於使用這個選項。您鏈接的方式,圖書館之前的來源,因此沒有被鏈接。不幸的是,我無法找到更多有關此信息的正確鏈接。 –

2

我正在使用Ubuntu 10.04,並且遇到同樣的問題(sys/capability.h not present on the file system)。

我解決了這個問題通過新立得軟件包管理器安裝包libcap-dev(1版:2.17-2ubuntul)的填充/usr/include/sys文件夾與文件capability.h

0

對於RHEL:

yum install libcap-devel 
gcc -lcap test.c