gpt4 book ai didi

dynamic - 链接器不使用 g++ 进行本地(用户)boost 安装

转载 作者:行者123 更新时间:2023-12-02 00:19:24 26 4
gpt4 key购买 nike

除了在系统范围内默认安装的 boost 库之外,我还想在本地安装(在我的主文件夹 (Linux) 中,比如 $HOME/boost)boost C++ 库。我从 sorce 构建它们并且工作正常。

之后,我设置环境变量 CPLUS_INCLUDE_PATH 和 LD_LIBRARY_PATH 以匹配本地安装的目标,因此它们分别指向 $HOME/boost/include 和 $HOME/boost/lib/。

为了对此进行测试,我使用了以下代码来测试 header 的 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 版本。到目前为止一切顺利。

为了测试链接,我使用了以下代码(取自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,但对于后者,这似乎不成立。

那么我如何确保使用 g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex(不带 -L)使用本地库?

[编辑] 进一步思考,我想知道在命令行中使用“-L$HOME/boost/lib”是否真的是绝对强制性的(使用 LDFLAGS 作为环境变量在非标准目录中使用库时似乎没有效果,可能只是与 Makefile 结合使用?是这样吗?

(顺便说一句,我认为这也适用于其他库,不仅是 boost...)

(我用的是:g++(Debian 4.4.5-8)4.4.5)

谢谢。

最佳答案

您需要使用环境变量 LIBRARY_PATH 让 gcc 知道在链接时在哪里可以找到库。 LD_LIBRARY_PATH 让程序知道在运行时在哪里可以找到动态库。这answer有更多细节。 “GCC 简介”中的这些链接也可能有用:Compilation options:Environment VariablesShared and Static Libraries

关于dynamic - 链接器不使用 g++ 进行本地(用户)boost 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com