即使设置了搜索路径,CodeBlock也找不到共享库

时间:2012-07-24 14:24:16

标签: c++ linux codeblocks ld archlinux

我在代码块中有一个非常基本的C ++项目,它使用glfw.so和另外两个编译为来自另一个项目{。1}}和libHorde3D.so的.so文件的库。后者放在项目根文件夹中,而glfw在我的libHorde3DUtils.so中(我认为)。

我已将项目文件夹添加到代码块中的链接器和编译器搜索路径。我已将/usr/liblibHorde3D.so以及libHorde3DUtils.so添加到“链接器设置”选项卡中的“链接库”中。我认为这基于stackoverflow上的类似问题就足够了。

然而,当我按下build:

glfw.so

我的系统是Arch Linux 64,我正在使用GCC。 我还尝试在ld cannot find -lHorde3D.so ld cannot find -lHorde3DUtils.so ld cannot find -lglfw.so libHorde3D.so中复制libHorde3DUtils.so/usr/lib但没有成功。

P.S。所有搜索路径都将在Debug和Release目标中复制。

2 个答案:

答案 0 :(得分:4)

比如说,如果库名是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
$ 

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

答案 1 :(得分:3)

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

-lHorde3D -lHorde3DUtils -lglfw

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