除了在系统范围内安装默认的 boost 库之外,我还想在本地安装 boost C++ 库(在我的主文件夹(Linux)中,比如 $HOME/boost )。我从sorce构建它们并且效果很好。
之后,我设置了环境变量 CPLUS_INCLUDE_PATH 和 LD_LIBRARY_PATH 来匹配本地安装的目的地,所以它们分别指向 $HOME/boost/include 和 $HOME/boost/lib/。
为了测试这一点,我使用以下代码来测试标题中 CPLUS_INCLUDE_PATH 的正确用法:
#include <boost/version.hpp>
#include <iostream>
#include <iomanip>
int main()
{
std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
return 0;
}
按预期编译它 g++ -o Test_boost_version test_boost_version.cpp
,报告预期的(本地)版本。让 CPLUS_INCLUDE_PATH 为空会给我默认的系统范围安装的增强版本。到现在为止还挺好。
为了测试链接,我使用了以下代码(取自 boost 主页:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
并用 g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex
.
但是,调用ldd Test_boost_linking
不使用本地安装(通过 LD_LIBRARY_PATH 提供),但给了我:libboost_regex.so.1.42.0 => /usr/lib/libboost_regex.so.1.42.0 (0x00007f9264612000)
当我使用g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex -L$HOME/boost/lib
时, ldd 正在报告正确的库(libboost_regex.so.1.50.0 => $HOME/boost/lib/libboost_regex.so.1.50.0 (0x00007f6947d2a000)
)。
这对我来说实际上是一个问题,因为我想设置我的本地环境,以便编译将忽略系统默认的 boost 安装并只使用本地安装,我认为这正是设置 CPLUS_INCLUDE_PATH 和 LD_LIBRARY_PATH 时所实现的,但对于后者,这似乎不成立。
那么如何确保 using g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex
(不带 -L)使用本地库?
[编辑] 进一步考虑,我想知道是否真的必须在命令行中使用“-L$HOME/boost/lib”(使用 LDFLAGS 作为环境变量似乎没有效果,可能只是结合使用使用Makefile)在非标准目录中使用库时?是这样吗?
(顺便说一句,我认为这也适用于其他图书馆,不仅仅是提升......)
(我用过:g++(Debian 4.4.5-8)4.4.5)
谢谢你。