即使定义了搜索路径,也无法找到自定义共享库

Posted

技术标签:

【中文标题】即使定义了搜索路径,也无法找到自定义共享库【英文标题】:Custom shared library cannot be found even when search path defined 【发布时间】:2017-10-27 17:21:09 【问题描述】:

我有以下文件:

.
├── combinatorics
│   ├── permutation.cpp
│   └── permutation.h
├── main.cpp
└── math
    ├── basic.cpp
    └── basic.h

我正在尝试通过执行以下步骤来创建一个共享库:

g++ -c -Wall -std=c++14 -fpic combinatorics/permutation.cpp -o permutations.o
g++ -c -Wall -std=c++14 -fpic math/basic.cpp -o mathbasic.o
g++ -shared -o combmath.so permutations.o mathbasic.o
g++ -Wall -std=c++14 main.cpp  -L. -o output -lcombmath

但我收到以下消息:

/usr/bin/ld: cannot find -lcombmath
collect2: error: ld returned 1 exit status

我做错了什么?

【问题讨论】:

我指定使用 -L 从当前目录搜索。所以这就是为什么我问为什么它仍然没有找到它,我不知道为什么不赞成 -lpermutations 未显示在您的命令列表中。它只出现在错误消息中。 我粘贴了错误的命令,谢谢。能否请您删除反对票? 我不知道为什么这被否决了,在命名不以 lib 开头的自定义库时这是一个常见的错误。 【参考方案1】:

链接选项-lfoo 指示链接器搜索文件 libfoo.so(共享库)或libfoo.a(静态库)在指定 链接器搜索目录(-L/x/y/z),然后在链接器的默认 搜索目录,当它找到其中一个文件时停止,并且 如果在同一目录中找到两者,则首选libfoo.so

为您的链接:

g++ -Wall -std=c++14 main.cpp  -L. -o output -lcombmath

因此,要成功,您需要先构建libcombmath.so 与命令在同一目录下:

g++ -shared -o libcombmath.so permutations.o mathbasic.o

而不是像您使用命令那样构建combmath.so

g++ -shared -o combmath.so permutations.o mathbasic.o

【讨论】:

所以我必须添加 lib 前缀

以上是关于即使定义了搜索路径,也无法找到自定义共享库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gcc 创建和使用自定义共享库?

Android 怎么自定义共享库

Android 怎么自定义共享库

对共享库函数的未定义引用

加载共享库时出错:libboost_mpi.so.1.65.1:没有这样的文件或目录 - 即使文件在那里

运行可执行文件时找不到共享库,即使共享库存在于指定路径中