我在使用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)
答案 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
或者类似的东西,我明白了。