编译时无法 link“.so”共享库到主“.c”文件
Unable to link ".so" shared library to main ".c" file while compiling
我正在尝试为我正在处理的特定问题创建一个共享库。它以“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 标志和波浪字符之间放置 space,则此错误消息消失。
原因是:如果-L和~之间没有space,波浪字符不能扩展到主目录。
我正在尝试为我正在处理的特定问题创建一个共享库。它以“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 标志和波浪字符之间放置 space,则此错误消息消失。
原因是:如果-L和~之间没有space,波浪字符不能扩展到主目录。