ld 找不到共享库

ld 找不到共享库

注:我带着问题访问了很多主题相似的对于这一点,虽然被接受的解决方案都是我所已经尝试过了,因此,在标记为重复之前请考虑这一点。

另外,我对 Linux 还很陌生,所以如果我说了一些根本错误的话,请随时纠正我。

问题:

我正在尝试创建并使用 c++共享库虽然“创建”部分似乎已经完成,但在尝试链接它时,ld 看不到它

以下是我已经完成的事情:

  1. 使用 -fPIC 明确声明编译所有 .cpp 文件

  2. 使用以下方式创建库

    g++ -shared -fPIC -Wl,-soname,libcustom_program_options.so.1 -o libcustom_program_options.so.1.0.1 *.o

  3. 运行 ldconfig 来更新加载程序缓存,如下所示:

    sudo ldconfig -n /usr/local/lib

当我尝试将该库链接到我的测试程序时:

g++ main.cpp -o main -L /usr/local/lib -l libcustom_program_options

事情的经过如下:

/usr/bin/ld:找不到 -llibcustom_program_options

collect2:错误:ld 返回 1 退出状态


注意:我不确定 ld 是否在寻找图书馆的全名或者索纳梅或者“lib- 和 .so.{version} 之间的名称”,所以我尝试了每一个。但都没有帮助。

答案1

好的,我终于解决了。

一旦我检查链接器实际上期望找到什么文件,我知道下一步该做什么了。

我通过以下方式完成此操作:

ld -L/usr/local/lib -lcustom_program_options --verbose

在哪里在 /usr/local/lib 中是我放置库的目录,自定义程序选项是去掉 lib- 前缀和所有前缀(即扩展和版本)的库名称。

当它打印出所有考虑的目录列表以及准确的预期文件名时,我知道它在寻找libcustom_program_options.so,同时调用 ldconfig (在 OP 中提到)仅在之间设置链接libcustom_program_options.so.1libcustom_program_options.so.1.0.1(请注意版本号)。

ld 尝试查找的文件确实不存在。

解决方案是手动创建链接:

sudo ln -s /usr/local/lib/libcustom_program_options.so.1 /usr/local/lib/libcustom_program_options.so

所以这基本上解决了问题。罪魁祸首是我不知道链接器寻找的确切文件名是什么。

相关内容