как преобразовать строку в каталог? повысить на Linux - PullRequest
0 голосов
/ 29 июня 2018

У меня проблемы с преобразованием пути в каталог в Linux с помощью надстройки. ниже приведен мой код, этот каталог существует в моей папке, но как-то не распознается как каталог, так как он всегда распечатывается. ПУТЬ НЕ СУЩЕСТВУЕТ

Я предполагаю, что это проблема 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 голосов
/ 29 июня 2018

Здесь вы указываете только путь поиска включаемого файла, без -L для связывания соответствующих библиотек:

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

Если это компилируется, то компоновщик и среда выполнения используют библиотеки повышения 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

Или что-то подобное, вы поняли идею, я надеюсь.

...