libpcap と ROHC ライブラリのコンパイル中に問題に直面しています。特定のプログラムを実行すると-
#include <stdio.h>
#include <pcap.h>
int main(int argc, char *argv[])
{
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if (dev == NULL) {
fprintf(stderr, "Couldn't find default device: %s\n", errbuf);
return(2);
}
printf("Device: %s\n", dev);
return(0);
}
manish@manish-HP-630-Notebook-PC:~$ gcc test.c -lpcap
manish@manish-HP-630-Notebook-PC:~$ sudo ./a.out
Device: eth0
しかし、プログラムの下で実行すると
#include <pcap/pcap.h>
int main(int argc, char *argv[])
{
pcap_t *handle;
handle = pcap_open_dead(DLT_LINUX_SLL, 5);
pcap_close(handle);
return 0;
}
output is compilation error
manish@manish-HP-630-Notebook-PC:~$ gcc -Wl,--verbose -o test_pcap -lpcap test_pcap.c
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o succeeded
/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crti.o succeeded
/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crti.o
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/crtbegin.o succeeded
/usr/lib/gcc/i686-linux-gnu/4.8/crtbegin.o
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libpcap.so failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libpcap.a failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libpcap.so succeeded
-lpcap (/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libpcap.so)
attempt to open /tmp/cc0kpMzr.o succeeded
/tmp/cc0kpMzr.o
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc.so failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc.a succeeded
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc_s.so succeeded
-lgcc_s (/usr/lib/gcc/i686-linux-gnu/4.8/libgcc_s.so)
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libc.so failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libc.a failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libc.so succeeded
opened script file /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libc.so
opened script file /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libc.so
attempt to open /lib/i386-linux-gnu/libc.so.6 succeeded
/lib/i386-linux-gnu/libc.so.6
attempt to open /usr/lib/i386-linux-gnu/libc_nonshared.a succeeded
(/usr/lib/i386-linux-gnu/libc_nonshared.a)elf-init.oS
attempt to open /lib/i386-linux-gnu/ld-linux.so.2 succeeded
/lib/i386-linux-gnu/ld-linux.so.2
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc.so failed
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc.a succeeded
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/libgcc_s.so succeeded
-lgcc_s (/usr/lib/gcc/i686-linux-gnu/4.8/libgcc_s.so)
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/crtend.o succeeded
/usr/lib/gcc/i686-linux-gnu/4.8/crtend.o
attempt to open /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crtn.o succeeded
/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crtn.o
ld-linux.so.2 needed by /lib/i386-linux-gnu/libc.so.6
found ld-linux.so.2 at /lib/i386-linux-gnu/ld-linux.so.2
/tmp/cc0kpMzr.o: In function `main':
test_pcap.c:(.text+0x19): undefined reference to `pcap_open_dead'
test_pcap.c:(.text+0x29): undefined reference to `pcap_close'
collect2: error: ld returned 1 exit status
私はrohcプログラムでもこの問題を発見しました。
#include <stdlib.h>
#include <stdio.h>
#include <rohc.h>
int main(int argc, char **argv)
{
printf("ROHC version %s\n", rohc_version());
return 0;
}
manish@manish-HP-630-Notebook-PC:~$ gcc -o test_rohc_common -g -Wall -I/usr/local/include -L/usr/local/lib/ -lrohc_common test_rohc_common.c
/tmp/ccJfyUEg.o: In function `main':
/home/manish/test_rohc_common.c:7: undefined reference to `rohc_version'
collect2: error: ld returned 1 exit status
私は両方のライブラリのインストールも確認しています。エラーなしですべてのテストに合格します。私はrohcライブラリコミュニティと連絡を取り合っていました.1 / gccはソースから.oオブジェクトを正しく構築します.2 / ldは小さなプログラムをROHCライブラリとリンクできません.3 / ldはlibrohc * .soファイルを正しく見つけます. 4/ librohc*.so ファイルは正しいようです (ELF 32 ビット、シンボルはすべて存在します)。私を助けてください。