我试图编译我的程序,它返回这个错误:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
在我的makefile中,我使用命令g++并链接到我的库,这是一个符号链接到我的库位于另一个目录。
是否有一个选项添加,使其工作,请?
我试图编译我的程序,它返回这个错误:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
在我的makefile中,我使用命令g++并链接到我的库,这是一个符号链接到我的库位于另一个目录。
是否有一个选项添加,使其工作,请?
当前回答
当你编译你的程序时,你必须提供库的路径;在g++中使用-L选项:
g++ myprogram.cc -o myprogram -lmylib -L/path/foo/bar
其他回答
如果符号链接是指向动态库的,也会出现这个错误。.so,但是由于遗留的原因-static出现在链接标志中。如果是,试着把它去掉。
除了已经给出的答案,也可能是*。因此文件存在,但没有正确命名。也可能是*。所以文件存在,但它由另一个用户/ root拥有。
问题1:名称不当
如果您将文件链接为-l<nameOfLibrary> 那么库文件名必须是lib<nameOfLibrary>的形式 如果你只有<nameOfLibrary>。重命名文件!
问题2:错误的所有者
为了验证这不是问题-做
ls -l /path/to/.so/file
如果文件由root或其他用户拥有,则需要执行
sudo chown yourUserName:yourUserName /path/to/.so/file
如果你的库名是libxyz。因此,它位于路径上,说:
/home/user/myDir
然后将其链接到您的程序:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog
在g++编译期间,如果使用-Loption改变Makefile可能不合适,则通过make define LIBRARY_PATH。我把额外的库放在/opt/lib中,所以我做了:
$ export LIBRARY_PATH=/opt/lib/
然后运行make以成功编译和链接。
使用共享库运行程序定义:
$ export LD_LIBRARY_PATH=/opt/lib/
在执行程序之前。
我试图链接到的库有一个非标准的名称(即没有'lib'前缀),所以他们建议使用这样的命令来编译它-
包含lib/cspice。一个- lm