在makefile中找不到.so库-l

问题描述 投票:0回答:1

我是makefile的新手,我想制作一个.so库并在main.o文件中使用它,我想使用当前目录中的库。我该如何运作?

CFLAGS = -Wall -g
CC = g++

all: main.o mylib.so
    $(CC) main.o mylib.so -o runProg

mylib.so : b1.o a1.o head1.h header2.h header3.h
    $(CC) $(CFLAGS) -shared -fPIC -o mylib.so b1.o a1.o head1.h header2.h header3.h

b1.o: b1.cc b1.h
    $(CC) $(CFLAGS) -fPIC b1.cc

a1.o: a1.cc
    $(CC) $(CFLAGS) -fPIC a1.cc

main.o: main.cc 
    $(CC) $(CFLAGS) main.cc -L. -lmylib

我得到的错误:

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lmylib
collect2.exe: error: ld returned 1 exit status
makefile:28: recipe for target 'main.o' failed
mingw32-make: *** [main.o] Error 1

对此工作的任何帮助和纠正都非常感谢!

c++ c makefile shared-libraries dynamic-library
1个回答
0
投票

所以有些错误。当仅将$(CC)用于编译时,必须指定-c。所以

b1.o: b1.cc b1.h
    $(CC) -c $(CFLAGS) -fPIC b1.cc

a1.o: a1.cc
    $(CC) -c $(CFLAGS) -fPIC a1.cc

从main.cc转到main.o是一个编译步骤,因此不需要共享库(但确实需要-c选项)。所以

main.o: main.cc 
    $(CC) -c $(CFLAGS) main.cc

程序链接步骤确实需要库选项,并且应提及正在生成的文件(而不是all)。所以

runProg: main.o mylib.so
    $(CC) main.o -o runProg -L. -lmylib

没有检查任何内容,但希望能有所帮助。毫无疑问,如果有任何错误,它将得到纠正。

© www.soinside.com 2019 - 2024. All rights reserved.