563

プログラムをコンパイルしようとすると、次のエラーが返されます。

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

私のメイクファイルでは、コマンドを使用しg++て、他のディレクトリにあるライブラリへのシンボリックリンクであるライブラリへのリンクを使用しています。

それを機能させるために追加するオプションはありますか?

4

14 に答える 14

238

ライブラリ名が言うlibxyz.soと、それがパス上にある場合は、次のように言います。

/home/user/myDir

次に、それをプログラムにリンクします。

g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog
于 2013-05-23T09:33:31.203 に答える
39

オプションを使用して Makefile を変更することが適切でない場合は、 g++via makedefineを使用してコンパイルします。追加のライブラリを入れたので、次のようにしました。LIBRARY_PATH-L/opt/lib

$ export LIBRARY_PATH=/opt/lib/

そして、makeコンパイルとリンクを成功させるために実行しました。

共有ライブラリを定義してプログラムを実行するには、次のように定義します。

$ export LD_LIBRARY_PATH=/opt/lib/

プログラムを実行する前に。

于 2015-09-10T12:50:06.553 に答える
7

プログラムをコンパイルするときは、ライブラリへのパスを指定する必要があります。g++ では -L オプションを使用します。

g++ myprogram.cc -o myprogram -lmylib -L/path/foo/bar
于 2013-05-23T09:22:56.460 に答える
3

これが私のラップトップの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 が正常にインストールされました!

于 2019-06-12T20:12:53.743 に答える
2

私がリンクしようとしていたライブラリは、非標準の名前 (つまり、'lib' のプレフィックスが付いていない) を持っていることが判明したため、次のようなコマンドを使用してコンパイルすることをお勧めしました -

gcc test.c -Iinclude lib/cspice.a -lm

于 2016-08-27T15:49:25.177 に答える
2

このエラーは、シンボリック リンクが動的ライブラリ .so へのリンクである場合にも発生する可能性がありますが、従来の理由により-static、リンク フラグの中に表示されます。その場合は、削除してみてください。

于 2016-06-17T12:09:25.617 に答える
2

Centos 7.8 を搭載した新しい VM で LXC をコンパイルすると、この問題が発生しました。上記のすべてを試しましたが、失敗しました。コンパイラ構成からフラグを削除することを提案する人も-staticいましたが、何も変更したくありませんでした。

助けになったのは、インストールglibc-staticして再試行することだけでした。それが誰かを助けることを願っています。

于 2020-07-28T17:32:13.673 に答える