makefile使用自定义目录和库

时间:2010-03-10 14:53:30

标签: c linux gcc

我写了一个makefile:

all: server client
server: server.o des.o sha1.o
/usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -o server server.o des.o sha1.o -I /usr/local/include/ -lgmp 
client: client.o des.o sha1.o
/usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -o -lgmp client client.o des.o sha1.o -I /usr/local/include/ 
server.o: server.c
/usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -c -lgmp server.c -I /usr/local/include/
client.o: client.c
/usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -c -lgmp client.c -I /usr/local/include/
des.o: des.c des.h
/usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -c -lgmp des.c -I /usr/local/include/
sha1.o: sha1.c sha1.h /usr/local/arm-2009q1/bin/arm-none-linux-gnueabi-gcc -c -lgmp sha1.c -I /usr/local/include/

clean: -rm *.o server client
然后gcc告诉我找不到-lgmp。我试图把它放在其他地方,还有其他不同的错误......

另外,我想知道是否可以在目标中放置2个元素。

Thanx很多

4 个答案:

答案 0 :(得分:4)

您可能需要为编译器提供-L选项,以将包含gmp库的目录添加到搜索目录列表中。

e.g。

-L/usr/local/lib

-L/usr/local/arm-2009q1/lib

当您似乎在进行交叉编译时,您需要在使用-L选项传递的路径中提供gmp的交叉编译版本。

答案 1 :(得分:2)

请在makefile中添加-lgmp之前使用-L选项并指定gmp所在的路径。

答案 2 :(得分:0)

关于make的德语教程:http://www.ijon.de/comp/tutorials/makefile.html

可以在目标中使用通配符,是的。

您可以指定路径以及-l / some / where / libgmp.so例如。

或者看一下gcc中的-L选项

答案 3 :(得分:0)

Thanx再次获得上述答案!它找到了库..但另一个问题是:

/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation
/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/lib/libgmp.so when searching for -lgmp
/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/lib/libgmp.a when searching for -lgmp
/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lgmp
collect2: ld returned 1 exit status
make: *** [server] Error 1