GCC没有将库链接到非默认路径

时间:2009-05-14 17:35:30

标签: gcc boost linker g++

我已经在我的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库。这真的很不方便。

1 个答案:

答案 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可能会有很多变化。)