プログラムをコンパイルしようとすると、次のエラーが返されます。
usr/bin/ld: cannot find -l<nameOfTheLibrary>
私のメイクファイルでは、コマンドを使用しg++
て、他のディレクトリにあるライブラリへのシンボリックリンクであるライブラリへのリンクを使用しています。
それを機能させるために追加するオプションはありますか?
ライブラリ名が言うlibxyz.so
と、それがパス上にある場合は、次のように言います。
/home/user/myDir
次に、それをプログラムにリンクします。
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog
オプションを使用して Makefile を変更することが適切でない場合は、 g++
via make
defineを使用してコンパイルします。追加のライブラリを入れたので、次のようにしました。LIBRARY_PATH
-L
/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
これが私のラップトップの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 が正常にインストールされました!
私がリンクしようとしていたライブラリは、非標準の名前 (つまり、'lib' のプレフィックスが付いていない) を持っていることが判明したため、次のようなコマンドを使用してコンパイルすることをお勧めしました -
gcc test.c -Iinclude lib/cspice.a -lm
このエラーは、シンボリック リンクが動的ライブラリ .so へのリンクである場合にも発生する可能性がありますが、従来の理由により-static
、リンク フラグの中に表示されます。その場合は、削除してみてください。
Centos 7.8 を搭載した新しい VM で LXC をコンパイルすると、この問題が発生しました。上記のすべてを試しましたが、失敗しました。コンパイラ構成からフラグを削除することを提案する人も-static
いましたが、何も変更したくありませんでした。
助けになったのは、インストールglibc-static
して再試行することだけでした。それが誰かを助けることを願っています。