我在代码块中有一个非常基本的C ++项目,它使用glfw.so
和另外两个编译为来自另一个项目{。1}}和libHorde3D.so
的.so文件的库。后者放在项目根文件夹中,而glfw在我的libHorde3DUtils.so
中(我认为)。
我已将项目文件夹添加到代码块中的链接器和编译器搜索路径。我已将/usr/lib
和libHorde3D.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目标中复制。
答案 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”等。