如何将字符串转换为目录?提升 Linux

how to convert a string into a directory? boost on Linux

我无法使用提升将路径转换为 ​​Linux 上的目录。下面是我的代码,这个目录存在于我的文件夹中,但不知何故不能被识别为目录,因为它总是打印出 PATH DOES NOT EXISTS

我猜这是一个 linux 问题,因为相同的代码在 windows visual studio 2015

上运行良好
#include <iostream>
#include <boost/filesystem.hpp>
using namespace std;
int main() 
{
    boost::filesystem::path p ("/home/dj/tut");
    cout <<p.generic_string()<<endl;
    if (boost::filesystem::is_directory(p)) { cout << "PATH EXISTS " << endl; }else { cout << "PATH DOES NOT EXISTS" << endl; }
}

我如何使用

进行编译
g++ -I /home/dj/boost_1_65_1/boost script.cpp -o test -std=c++11 -lboost_filesystem -lboost_system

然后对 运行 执行以下操作:

./test

ldd test 我得到:

linux-vdso.so.1 => (0x00007ffc8cdb9000) 
libboost_filesystem.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0 (0x00007fef36573000)
libboost_system.so.1.58.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 (0x00007fef3636f000) 
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fef35fed000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fef35dd7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef35a0d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fef357f0000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fef354e7000) /lib64/ld-linux-x86-64.so.2 (0x00007fef3678b000) 

此处仅指定包含文件搜索路径,没有 -L 链接匹配的库:

g++ -I /home/dj/boost_1_65_1/boost script.cpp -o test -std=c++11 -lboost_filesystem -lboost_system

如果编译成功,则链接器和 运行time 正在使用 Ubuntu 的增强库。现在我不知道这会如何产生你得到的效果,但是当你混合这样的版本时会发生有趣的事情。

尝试像这样编译(根据需要修复路径)让链接器搜索您自己的库版本:

g++ -I /home/dj/boost_1_65_1/boost script.cpp -o test -std=c++11 -L/home/dj/boost_1_65_1/boost -lboost_filesystem -lboost_system

然后要在 运行 时使用正确的库,您可以使用这个(注意,单命令行):

LD_LIBRARY_PATH=/home/dj/boost_1_65_1/boost ./test

或者类似的东西,我希望你明白了。