Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在makefile中找不到.so库-l_C++_C_Makefile_Shared Libraries_Dynamic Library - Fatal编程技术网

C++ 在makefile中找不到.so库-l

C++ 在makefile中找不到.so库-l,c++,c,makefile,shared-libraries,dynamic-library,C++,C,Makefile,Shared Libraries,Dynamic Library,我是makefiles新手,我想创建一个.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

我是makefiles新手,我想创建一个.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。所以

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

main.o: main.cc 
    $(CC) -c $(CFLAGS) main.cc
程序链接步骤确实需要库选项,并且应该提到正在生成的文件,而不是所有文件。所以


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

非常感谢!我更新了我的代码,我在更新后得到了这个代码:mylib.so:file not recognized:file format not recognized参考$CC main.o mylib.so-o runProg-L.-lmylibn不确定,你的库真的叫做mylib.so吗?你不应该将mylib.so添加到链接行:你有-lmylib,这是你需要的。另外,如果您想使用-lmylib,那么您的共享库必须以lib作为前缀:例如,它应该命名为libmylib.so。@Madcascient是的,但我不确定mylib.so是真正的库名,还是这个问题的化名。库名应该以lib开头,makefile中对该库的任何引用都应使用库libxxx.so的全名,但-l选项除外,该选项应删除lib前缀和.so后缀,即-lxxx。有道理?
main.o: main.cc 
    $(CC) -c $(CFLAGS) main.cc
runProg: main.o mylib.so
    $(CC) main.o -o runProg -L. -lmylib