问题描述
我正在尝试为正在处理的特定问题创建共享库。它具有“ point_sense.c”作为主要文件,该文件使用在“ createpolygon.c”中定义的功能。这些函数在头文件“ createpolygon.h”中声明。
要编译它们,我使用了一个如下所示的makefile
all:point_sense
createpolygon.o:createpolygon.c
g++ -c -fpic createpolygon.c
libcreatepolygon.so:createpolygon.o
g++ -shared -o libcreatepolygon.so createpolygon.o
point_sense:point_sense.c libcreatepolygon.so
g++ -o point_sense -L~Desktop/Summer_2020_linux/tutorials/cpp_practise point_sense.c -lcreatepolygon
clean:
rm point_sense createpolygon.o libcreatepolygon.so
g++ -c -fpic createpolygon.c
g++ -shared -o libcreatepolygon.so createpolygon.o
g++ -o point_sense -L~Desktop/Summer_2020_linux/tutorials/cpp_practise point_sense.c -lcreatepolygon
/usr/bin/ld: cannot find -lcreatepolygon
collect2: error: ld returned 1 exit status
make: *** [makefile:10: point_sense] Error 1
ld -L~/Desktop/Summer_2020_linux/tutorials/cpp_practise -lcreatepolygon -verbose
经过很长的输出后,我得到了(代码之间的一些不重要的行被跳过了)
ld: mode elf_x86_64
attempt to open ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatepolygon.so Failed
attempt to open ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatepolygon.a Failed
attempt to open /usr/local/lib/x86_64-linux-gnu/libcreatepolygon.so Failed
attempt to open /usr/local/lib/x86_64-linux-gnu/libcreatepolygon.a Failed
.
.
.
ld: cannot find -lcreatepolygon
但是当我尝试直接打开'libcreatepolygon.so'时,我可以将其打开。
$ nano ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatepolygon.so
有几个threads解释了这样做的过程,但是我看不出我做错了什么。任何帮助表示赞赏。 我正在使用Ubuntu 20.04.1 LTS和g ++(Ubuntu 9.3.0-10ubuntu2)9.3.0。
解决方法
我试图在此处重现该问题,如果在-L标志和代字字符之间放置一个空格,此错误消息就会消失。
原因是:如果-L和〜之间没有空格,则代字号字符不能扩展到主目录。