如何将字符串转换为目录?提升 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
或者类似的东西,我希望你明白了。
我无法使用提升将路径转换为 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
或者类似的东西,我希望你明白了。