簡體   English   中英

在 makefile 中找不到.so 庫 -l

[英]can't find .so library -l in makefile

我是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

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

非常感謝任何幫助和糾正這項工作!

所以有幾件事不對。 當您僅使用$(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

沒有檢查任何東西,但希望這會有所幫助。 毫無疑問,如果有任何錯誤,它將被糾正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM