我试图编译我的程序,它返回这个错误:

usr/bin/ld: cannot find -l<nameOfTheLibrary>

在我的makefile中,我使用命令g++并链接到我的库,这是一个符号链接到我的库位于另一个目录。

是否有一个选项添加,使其工作,请?


当前回答

我遇到了同样的错误消息。

我构建了cmocka作为一个so,并试图将它链接到我的可执行文件。 但ld总是抱怨如下:

/usr/bin/ld:无法找到-lcmocka

在构建cmocka之后,生成了3个文件:

libcmocka.so libcmocka.so.0 Libcmocka. So. 0.7.0

1和2是符号链接,只有3是真正的文件。

我只复制了1到我的库文件夹,ld没有找到3。

在我复制了所有的3,ld作品。

其他回答

当你编译你的程序时,你必须提供库的路径;在g++中使用-L选项:

g++ myprogram.cc -o myprogram -lmylib -L/path/foo/bar

如果你的库名是libxyz。因此,它位于路径上,说:

/home/user/myDir

然后将其链接到您的程序:

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog

我遇到了同样的错误消息。

我构建了cmocka作为一个so,并试图将它链接到我的可执行文件。 但ld总是抱怨如下:

/usr/bin/ld:无法找到-lcmocka

在构建cmocka之后,生成了3个文件:

libcmocka.so libcmocka.so.0 Libcmocka. So. 0.7.0

1和2是符号链接,只有3是真正的文件。

我只复制了1到我的库文件夹,ld没有找到3。

在我复制了所有的3,ld作品。

这是我笔记本电脑的Ubuntu信息。

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

我使用locate查找boost_filesystem和boost_system的.so文件

locate libboost_filesystem
locate libboost_system

然后将.so文件链接到/usr/lib并重命名为.so

sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1 /usr/lib/libboost_filesystem.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.65.1 /usr/lib/libboost_system.so

完成了!R包velocyto。R安装成功!

检查你的库的位置,例如lxxx.so:

locate lxxx.so

如果不在/usr/lib文件夹中,输入:

sudo cp yourpath/lxxx.so /usr/lib

完成了。