【问题标题】:Unable to link ".so" shared library to main ".c" file while compiling编译时无法将“.so”共享库链接到主“.c”文件
【发布时间】:2020-12-10 03:17:18
【问题描述】:

我正在尝试为我正在处理的特定问题创建一个共享库。它以“point_sense.c”作为主文件,使用“createPolygon.c”中定义的函数。这些函数在头文件“createPolygon.h”中声明。

为了编译它们,我使用了一个如下所示的生成文件


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。

【问题讨论】:

  • 您不应该在构建脚本中使用绝对路径(如 Makefile),因此请尝试使用 -L . 或类似的。

标签: compilation g++ shared-libraries dynamic-linking .so


【解决方案1】:

我尝试在此处重现该问题,如果您在 -L 标志和波浪号字符之间放置一个空格,此错误消息就会消失。

原因是:如果-L和~之间没有空格,波浪号不能展开到主目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多