如何将字符串转换为目录?在Linux上

时间:2018-06-29 07:48:16

标签: c++ linux boost boost-filesystem

我在使用boost将路径转换为Linux上的目录时遇到麻烦。以下是我的代码,该目录存在于我的文件夹中,但由于总是打印出PATH,所以不被识别为目录

我猜这是一个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) 

1 个答案:

答案 0 :(得分:1)

在这里,您仅指定包含文件搜索路径,而没有-L来链接匹配的库:

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

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

尝试编译这样的内容(根据需要修复路径),以使链接程序搜索您自己的libs版本:

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

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