我的问题与此有关:创建静态和共享 C++ 库
我正在编译一个库,以便将它安装在两个不同系统上的 ~/local 中。似乎每次我这样做时都会遇到链接器问题,这需要我几个小时才能弄清楚。我正在查看的特定库是primesieve。在该库中,默认情况下仅构建静态库。不幸的是count_primes.cpp
,无论出于何种原因,示例代码都不会与我的一个系统上的库的静态版本链接。最终我想出了如何构建共享版本,现在代码编译得很好,不需要丑陋的 hack。
鉴于上述情况,如果您正在使用多个系统并希望获得编译代码的最佳机会,那么编译静态版本和共享版本似乎是一个好主意。这是真的?是否有理由不构建两个版本?我意识到这是一个有点主观的问题,但这是一个严重的编程问题,我认为这里的很多人可能都遇到过。
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