私の質問はこれに関連しています:静的および共有C++ライブラリの両方を作成する
2つの異なるシステムの〜/ localにインストールするために、ライブラリをコンパイルしています。これを行うたびに、リンカーの問題が発生し、理解するのに何時間もかかるようです。私が見ている特定のライブラリはprimesieveです。そのライブラリでは、静的ライブラリのみをビルドするのがデフォルトです。残念ながら、サンプルコードcount_primes.cpp
は、何らかの理由で、私のシステムの1つにある静的バージョンのライブラリとリンクしませんでした。最終的に私は共有バージョンを構築する方法を理解し、コードは醜いハックを必要とせずにうまくコンパイルされるようになりました。
上記のことを考えると、複数のシステムで作業していて、コードをコンパイルする可能性を最大限に高めたい場合は、静的バージョンと共有バージョンの両方をコンパイルすることをお勧めします。これは本当ですか?両方のバージョンをビルドしない理由はありますか?これは少し主観的な質問だと思いますが、ここの多くの人がおそらく遭遇したと思う深刻なプログラミングの問題です。
PS。
これは、primesieveの共有バージョンと静的バージョンの両方をコンパイルして〜/localにインストールするために使用することになったものです。
make
make lib
make install PREFIX=~/local
make clean
make lib SHARED=yes
make install PREFIX=~/local
これmake clean
が原因です。次に、これを自分の.bash_profile
:に追加しました。
export LIBRARY_PATH=$LIBRARY_PATH:~/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/local/lib
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/local/include
または、環境変数を変更せずに、次のcount_primes.cpp
ようにサンプルプログラムをコンパイルできました。
g++ -I ~/local/include/ -L ~/local/lib/ -lprimesieve count_primes.cpp