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

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

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

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


当前回答

在g++编译期间,如果使用-Loption改变Makefile可能不合适,则通过make define LIBRARY_PATH。我把额外的库放在/opt/lib中,所以我做了:

$ export LIBRARY_PATH=/opt/lib/

然后运行make以成功编译和链接。

使用共享库运行程序定义:

$ export LD_LIBRARY_PATH=/opt/lib/

在执行程序之前。

其他回答

当你编译你的程序时,你必须提供库的路径;在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

首先,你需要知道lxxx的命名规则:

/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find -lltdl
/usr/bin/ld: cannot find -lXtst

Lc就是libc。LLTDL的意思是libltdl。所以,lXtst意味着libx .so。

它是lib + lib-name +。So


一旦我们知道了这个名称,我们就可以使用locate来找到这个lxxx的路径。所以文件。

$ locate libiconv.so
/home/user/anaconda3/lib/libiconv.so   # <-- right here
/home/user/anaconda3/lib/libiconv.so.2
/home/user/anaconda3/lib/libiconv.so.2.5.1
/home/user/anaconda3/lib/preloadable_libiconv.so
/home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so
/home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so.2
/home/user/anaconda3/pkgs/libiconv-1.14-0/lib/libiconv.so.2.5.1
/home/user/anaconda3/pkgs/libiconv-1.14-0/lib/preloadable_libiconv.so

如果你找不到它,你需要通过yum安装它(我使用CentOS)。通常你有这个文件,但它没有链接到正确的地方。


将它链接到正确的位置,通常是/lib64或/usr/lib64

$ sudo ln -s /home/user/anaconda3/lib/ libiccon .所以/usr/lib64/

完成了!

裁判:https://i-pogo.blogspot.jp/2010/01/usrbinld-cannot-find-lxxx.html

除了已经给出的答案,也可能是*。因此文件存在,但没有正确命名。也可能是*。所以文件存在,但它由另一个用户/ root拥有。

问题1:名称不当

如果您将文件链接为-l<nameOfLibrary> 那么库文件名必须是lib<nameOfLibrary>的形式 如果你只有<nameOfLibrary>。重命名文件!

问题2:错误的所有者

为了验证这不是问题-做

ls -l /path/to/.so/file

如果文件由root或其他用户拥有,则需要执行

sudo chown yourUserName:yourUserName /path/to/.so/file

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

locate lxxx.so

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

sudo cp yourpath/lxxx.so /usr/lib

完成了。