2

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

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

现在当我跑步时,

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

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

4

1 回答 1

2

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

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

于 2009-05-14T17:52:24.360 回答