【问题标题】:CodeBlocks cannot find shared libraries even when search paths are setup即使设置了搜索路径,CodeBlocks 也无法找到共享库
【发布时间】:2012-07-24 14:24:16
【问题描述】:

我在代码块中有一个非常基本的 C++ 项目,它使用 glfw.so 和其他两个库,这些库从另一个项目 libHorde3D.solibHorde3DUtils.so 编译为 .so 文件。后者放置在项目根文件夹中,而 glfw 位于我的/usr/lib 中(我认为)。

我已将项目文件夹添加到代码块中的链接器和编译器搜索路径。我已将libHorde3D.solibHorde3DUtils.so 以及glfw.so 添加到链接器设置选项卡中的链接库中。根据之前关于stackoverflow的类似问题,我认为这已经足够了。

但是当我按下构建时:

ld cannot find -lHorde3D.so
ld cannot find -lHorde3DUtils.so
ld cannot find -lglfw.so

我的系统是 Arch Linux 64,我使用的是 GCC。 我还尝试在/usr/lib/usr/lib64 中对libHorde3D.solibHorde3DUtils.so 进行bopying,但没有成功。

附:所有搜索路径都跨 Debug 和 Release 目标复制。

【问题讨论】:

  • 您不应将“.so”作为链接器标志。像 -llibrary 一样使用它..
  • 旁注:设置 CodeBlocks 选项以在项目构建期间显示完整的命令行,这有助于解决此类问题。

标签: c++ linux codeblocks ld archlinux


【解决方案1】:

假设,如果库名称是 libmylibrary.so,那么链接到该库的链接器选项将类似于 -lmylibrary。请注意,lib 前缀和.so 后缀不存在——它们是由链接器自动添加的。在您的情况下,您似乎指定了错误的名称。尝试从中删除.so,应该可以解决问题。

下面是一个简单的演示,说明如何通过犯类似的错误来触发失败:

$ echo 'int main() { return 0; }' > test.c
$ gcc -o test ./test.c -lc
$ gcc -o test ./test.c -lc.so
/usr/bin/ld: cannot find -lc.so
collect2: ld returned 1 exit status
$ 

第一个命令成功,第二个命令(库名不正确)失败。

【讨论】:

  • 两个回复都是正确的,并修正了我的愚蠢错误。谢谢!
【解决方案2】:

你不能传递“.so”。链接器选项是

-lHorde3D -lHorde3DUtils -lglfw

这样,链接器将在库路径中搜索“libHorde3D.so”等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多