3

我在代码块中有一个非常基本的 C++ 项目,它使用了glfw.so另外两个库,这些库从另一个项目编译为 .so 文件,libHorde3D.so以及libHorde3DUtils.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。我也尝试过bopying libHorde3D.so,但没有成功。libHorde3DUtils.so/usr/lib/usr/lib64

PS 所有搜索路径都在 Debug 和 Release 目标中复制。

4

2 回答 2

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
$ 

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

于 2012-07-24T14:30:02.137 回答
3

你不能通过“.so”。链接器选项是

-lHorde3D -lHorde3DUtils -lglfw

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

于 2012-07-24T14:29:52.533 回答