我试图交叉编译httpry。我已经交叉编译了libpcap,但出于某种原因,当我尝试编译httpry时,它似乎无法找到libpcap库。
我必须修改httpry的Makefile才能尝试交叉编译:
CC = /usr/bin/arm-linux-gnueabi-gcc
CCFLAGS = -Wall -O3 -funroll-loops -I/home/josh/workbench/libpcap-1.8.1
DEBUGFLAGS = -Wall -g -DDEBUG -I/home/josh/workbench/libpcap-1.8.1
当我尝试编译时,我收到以下错误:
josh@LAPTOP-D3KEQ9EM:~/workbench/httpry-0.1.8$ make
/usr/bin/arm-linux-gnueabi-gcc -Wall -O3 -funroll-loops -I/home/josh/workbench/libpcap-1.8.1 -o httpry httpry.c format.c methods.c utility.c rate.c -lpcap -lm -pthread
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lpcap
collect2: error: ld returned 1 exit status
make: *** [httpry] Error 1
因此,LD似乎找不到图书馆。出于好奇,我试过了
josh@LAPTOP-D3KEQ9EM:~/workbench/httpry-0.1.8$ ld -L/home/josh/workbench/libpcap-1.8.1 -lpcap
ld: skipping incompatible /home/josh/workbench/libpcap-1.8.1/libpcap.so when searching for -lpcap
ld: skipping incompatible /home/josh/workbench/libpcap-1.8.1/libpcap.a when searching for -lpcap
ld: cannot find -lpcap
似乎我在PATH上的LD给出了相同的错误,并且它的原因是因为libpcap是针对我当前架构的不同架构进行交叉编译的。但我的交叉复杂GCC没有使用PATH LD,它使用自己的版本,当我尝试时,我得到以下
josh@LAPTOP-D3KEQ9EM:~/workbench/httpry-0.1.8$ /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld -L/home/josh/workbench/libpcap-1.8.1 -lpcap
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000000081e4
那有点奇怪,对吧?看起来当我运行ld它能够没有任何问题地找到库时,但是当GCC运行它时出于某种原因它不会。
我错过了一些明显的东西吗?有没有办法可以找出gcc用ld调用的参数?我尝试使用-v或 - ###,但我无法在输出中找到任何有用的东西。
谢谢,
约什
答案 0 :(得分:0)
似乎LD没有找到正确的目录。我想 - 我会确定它确实如此,但事实证明-L也是必要的:
CC = /usr/bin/arm-linux-gnueabi-gcc
CCFLAGS = -Wall -O3 -funroll-loops -I/home/josh/workbench/libpcap-1.8.1 -L/home/josh/workbench/libpcap-1.8.1
DEBUGFLAGS = -Wall -g -DDEBUG -I/home/josh/workbench/libpcap-1.8.1 -L/home/josh/workbench/libpcap-1.8.1
我不完全确定为什么会这样,我会赞赏一个解释。 - 过去我一直都很适合我。