用于在Linux中创建库的Makefile无法编译

时间:2012-07-22 15:51:53

标签: c linux eclipse ubuntu makefile

我有3个文件,my_pipe.hmy_pipe.cmain.c,其中my_pipe应该是一个库。

当我在Eclipse中编译它时,编译很好,没有错误,但当我在makefile中运行以下terminal并点击make时:

exer3:  main.o libmywrapper.a

    gcc main.c libmywrapper.a -o exer3 -static -lrt



libmywrapper.a: my_pipe.o

    ar rcs libmywrapper.a my_pipe.o



main.o: main.c my_pipe.h

    gcc -lpthread -lrt -c main.c



my_pipe.o:  my_pipe.c my_pipe.h

    gcc -lpthread -lrt -c my_pipe.c

我明白了:

a@ubuntu:~/Desktop/myExer$ make
gcc -lpthread -lrt -c main.c
gcc -lpthread -lrt -c my_pipe.c
ar rcs libmywrapper.a my_pipe.o
gcc main.c libmywrapper.a -o exer3 -static -lrt
libmywrapper.a(my_pipe.o): In function `shm_pipe_init':
my_pipe.c:(.text+0x61): undefined reference to `sem_init'
libmywrapper.a(my_pipe.o): In function `shm_pipe_read':
my_pipe.c:(.text+0x17f): undefined reference to `sem_wait'
my_pipe.c:(.text+0x196): undefined reference to `sem_getvalue'
my_pipe.c:(.text+0x1ba): undefined reference to `sem_wait'
libmywrapper.a(my_pipe.o): In function `shm_pipe_write':
my_pipe.c:(.text+0x4b7): undefined reference to `sem_post'
collect2: ld returned 1 exit status
make: *** [exer3] Error 1

知道makefile有什么问题吗?

由于

更新,上面!

2 个答案:

答案 0 :(得分:2)

-lpthread-lrt等链接器选项必须在编译行中排在最后。尝试:

gcc main.o libmywrapper.a -o exer3 -static -lrt

编译时,不需要链接器标志。 E.g:

main.o: main.c my_pipe.h
  gcc -c main.c

答案 1 :(得分:2)

以下是解决方案:

exer3:  main.o sharedMemoryLib.a

    gcc main.o sharedMemoryLib.a -o exer3 -static -lrt -lpthread



sharedMemoryLib.a:  my_pipe.o

    ar rcs sharedMemoryLib.a my_pipe.o



main.o: main.c my_pipe.h

    gcc -c main.c



my_pipe.o:  my_pipe.c my_pipe.h

    gcc -c my_pipe.c