Boost filesystem linker fejl
Hej.Jeg har prøvet at compile dette eksempel:
// simple_ls program -------------------------------------------------------//
// Copyright Jeff Garland and Beman Dawes, 2002
// Use, modification, and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/libs/filesystem for documentation.
// As an example program, we don't want to use any deprecated features
#define BOOST_FILESYSTEM_NO_DEPRECATED
#include "boost/filesystem/operations.hpp"
#include "boost/filesystem/path.hpp"
#include "boost/progress.hpp"
#include <iostream>
namespace fs = boost::filesystem;
int main( int argc, char* argv[] )
{
boost::progress_timer t( std::clog );
fs::path full_path( fs::initial_path<fs::path>() );
if ( argc > 1 )
full_path = fs::system_complete( fs::path( argv[1] ) );
else
std::cout << "\nusage: simple_ls [path]" << std::endl;
unsigned long file_count = 0;
unsigned long dir_count = 0;
unsigned long other_count = 0;
unsigned long err_count = 0;
if ( !fs::exists( full_path ) )
{
std::cout << "\nNot found: " << full_path.file_string() << std::endl;
return 1;
}
if ( fs::is_directory( full_path ) )
{
std::cout << "\nIn directory: "
<< full_path.directory_string() << "\n\n";
fs::directory_iterator end_iter;
for ( fs::directory_iterator dir_itr( full_path );
dir_itr != end_iter;
++dir_itr )
{
try
{
if ( fs::is_directory( dir_itr->status() ) )
{
++dir_count;
std::cout << dir_itr->path().filename() << " [directory]\n";
}
else if ( fs::is_regular_file( dir_itr->status() ) )
{
++file_count;
std::cout << dir_itr->path().filename() << "\n";
}
else
{
++other_count;
std::cout << dir_itr->path().filename() << " [other]\n";
}
}
catch ( const std::exception & ex )
{
++err_count;
std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
}
}
std::cout << "\n" << file_count << " files\n"
<< dir_count << " directories\n"
<< other_count << " others\n"
<< err_count << " errors\n";
}
else // must be a file
{
std::cout << "\nFound: " << full_path.file_string() << "\n";
}
return 0;
}
med følgende:
g++ -I /usr/local/include/boost-1_38/ boost-filesystem-test.cpp -o bfs -lboost_filesystem
men før denne fejl:
ld: library not found for -lboost_filesystem
collect2: ld returned 1 exit status
Bemærk venligst at jeg også har prøvet at henvise explicit til hvor min libs ligger med -L /usr/local/lib/. Dette virker dog heller lige lidt.
Jeg har selv installeret/kompileret boost-1.38.
Mit system er en macbook OS X 10.5.6
Min boost libs ligger i /usr/local/lib og mine boost includes ligger i /usr/local/include/boost-1_38/boost/
Jeg kan ikke forstå hvorfor den ikke kan finde min filesystem lib. En ls på /usr/local/lib viser at disse boost_filesystem libraries ligger der:
libboost_filesystem-xgcc40-mt-1_38.a
2 libboost_filesystem-xgcc40-mt-1_38.dylib
libboost_filesystem-xgcc40-mt.a -> libboost_filesystem-xgcc40-mt-1_38.a
libboost_filesystem-xgcc40-mt.dylib -> libboost_filesystem-xgcc40-mt-1_38.dylib
Jeg forstår ikke lige hvorfor min linker ikke kan finde de dynamiske biblioteker.
Jeg har rodet med det i lidt tit. Googlet lidt, men jeg kan bare ikke se hvad det er jeg gør galt. Sikkert noget basalt, dog kan jeg ikke lige se hvad.