我已经在我的Fedora10机器上安装了C ++库,但我想使用我保存在我的主文件夹中某个位置的更新版本。我希望g ++使用我的主文件夹位置中的包含和库文件而不是默认值(/usr/include and /usr/lib64
)。
就此而言,我还在我的CPLUS\_INCLUDE\_PATH and LIBRARY\_PATH
文件中声明了~/.bashrc
个环境变量,如here所述。
现在我跑的时候,
g++ -o hello.so -fPIC hello.cpp -shared -lboost_python
预处理器使用来自我的主文件夹位置的包含文件,覆盖默认位置(因为它应该,因为CPLUS\_INCLUDE\_PATH
在搜索路径中具有更高的优先级)。但链接器似乎没有遵循相同的优先级规则。它始终使用默认位置/usr/lib64
中的libboost_python.so,而不是首先搜索LIBRARY\_PATH
。当我使用libboost\_python.so
开关明确指定时,它仅链接到我的主文件夹中的-L
库。这真的很不方便。
答案 0 :(得分:2)
-L
开关是告诉编译器在哪里找到库的标准方法。编写一个构建编译器/链接器开关的makefile - 你会发现值得投入时间。你可以这样做:
MY_LIBPATH += -L$(BOOST_LIB_PATH) MY_INCPATH += -I$(BOOST_INC_PATH) hello.so: hello.cpp g++ -o $@ -fPIC $(MY_INCPATH) $(MY_LIBPATH) hello.cpp -shared -lboost_python
然后你可以通过环境来控制它(当然,如何构建makefile可能会有很多变化。)