OpenCVプログラムを次のようにコンパイルします。
g++ `pkg-config --cflags opencv --libs opencv` <filename>.cpp
それは私のコンピュータで完全に動作します。共有ライブラリをプログラムだけでコンパイルして、opencvがインストールされていない他のコンピューターで実行できるようにすることはできますか?もしそうなら、どうすればいいですか?
コンパイル中のプログラムは、コンピューター上の共有ライブラリ(.soファイル)に動的にリンクされます。コンパイルされた実行可能ファイルは、実行時にこれらの共有ライブラリを使用します。ただし、これらの共有ライブラリは他のコンピューターに存在しない可能性があるため、実行可能ファイルを実行できない可能性があります。
これに対する解決策は、共有ライブラリを動的にリンクするのではなく、アーカイブライブラリ(.aファイル)を静的にリンクすることです。OpenCVは、アーカイブライブラリ自体を配布しません。したがって、を使用してソースからアーカイブライブラリをコンパイルする必要があります cmake -DBUILD_SHARED_LIBS=OFF
。このアーカイブライブラリは、スタンドアロンの実行可能ファイルを作成するために使用できます。
はい、ある程度:静的リンクを検索します。opencvコピーには、ライブラリの.aバージョンが含まれている必要があります(あなたが言及した.soだけでなく)。これは、他の依存関係にも当てはまります。
いいえ。静的ライブラリを使用する必要があります。