【问题标题】:GCC is not linking library to a non-default pathGCC 没有将库链接到非默认路径
【发布时间】:2009-05-14 17:35:29
【问题描述】:

我已经在我的 Fedora10 机器上安装了 boost C++ 库,但我想使用一个更新的版本,我保存在我的主文件夹中的某个位置。我希望 g++ 使用我的主文件夹位置而不是默认位置 (/usr/include and /usr/lib64) 中的包含和库文件。

就此而言,我还在~/.bashrc 文件中声明了CPLUS\_INCLUDE\_PATH and LIBRARY\_PATH 环境变量,如here 所述。

现在当我跑步时,

g++ -o hello.so -fPIC hello.cpp -shared -lboost_python

预处理器使用我的主文件夹位置中的包含文件,覆盖默认位置(应该如此,因为CPLUS\_INCLUDE\_PATH 在搜索路径中具有更高的优先级)。但是链接器似乎没有遵循相同的优先规则。它始终使用默认位置 /usr/lib64 中的 libboost_python.so,而不是首先搜索 LIBRARY\_PATH。当我使用-L 开关明确指定时,它仅链接到我的主文件夹中的libboost\_python.so 库。这真的很不方便。

【问题讨论】:

    标签: gcc boost linker g++


    【解决方案1】:

    -L 开关是告诉编译器在哪里找到库的标准方法。编写一个构建您的编译器/链接器开关的 makefile - 您会发现投入时间是值得的。您可以执行以下操作:

    MY_LIBPATH += -L$(BOOST_LIB_PATH) MY_INCPATH += -I$(BOOST_INC_PATH) 你好.so:你好.cpp g++ -o $@ -fPIC $(MY_INCPATH) $(MY_LIBPATH) hello.cpp -shared -lboost_python

    然后您可以通过环境来控制它(当然,如何构建 makefile 可能会有很多变化。)

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2013-02-16
      • 2014-07-01
      • 2012-02-02
      相关资源
      最近更新 更多