我试图编译我的程序,它返回这个错误:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
在我的makefile中,我使用命令g++并链接到我的库,这是一个符号链接到我的库位于另一个目录。
是否有一个选项添加,使其工作,请?
我试图编译我的程序,它返回这个错误:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
在我的makefile中,我使用命令g++并链接到我的库,这是一个符号链接到我的库位于另一个目录。
是否有一个选项添加,使其工作,请?
当前回答
似乎没有任何答案可以解决初学者在第一时间未能安装所需库的常见问题。
在Debianish平台上,如果libfoo缺失,你可以经常用类似的东西来安装它
apt-get install libfoo-dev
开发工作需要包的-dev版本,即使是简单的开发工作,如编译源代码以链接到库。
包名有时需要一些修饰(libfoo0-dev?没有lib前缀的Foo-dev ?等等),或者你可以简单地使用发行版的包搜索来精确地找出哪些包提供了特定的文件。
(如果有不止一个,你需要找出它们之间的区别。选择最酷或最受欢迎的是一种常见的捷径,但对于任何严肃的开发工作来说都不是可接受的过程。)
对于其他体系结构(最明显的是RPM),应用类似的过程,尽管细节有所不同。
其他回答
我遇到了同样的错误消息。
我构建了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作品。
似乎没有任何答案可以解决初学者在第一时间未能安装所需库的常见问题。
在Debianish平台上,如果libfoo缺失,你可以经常用类似的东西来安装它
apt-get install libfoo-dev
开发工作需要包的-dev版本,即使是简单的开发工作,如编译源代码以链接到库。
包名有时需要一些修饰(libfoo0-dev?没有lib前缀的Foo-dev ?等等),或者你可以简单地使用发行版的包搜索来精确地找出哪些包提供了特定的文件。
(如果有不止一个,你需要找出它们之间的区别。选择最酷或最受欢迎的是一种常见的捷径,但对于任何严肃的开发工作来说都不是可接受的过程。)
对于其他体系结构(最明显的是RPM),应用类似的过程,尽管细节有所不同。
在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
如果你的库名是libxyz。因此,它位于路径上,说:
/home/user/myDir
然后将其链接到您的程序:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog