2014-05-14 4 views
0

Il y a beaucoup de discussions sur ce sujet, mais j'ai essayé certaines des solutions et rien ne semble fonctionner.Compilation boost sous Mac OS X Mavericks

Si j'installe coup de pouce avec:

brew install booost --c++11 

et essayer de compiler le tut1.cpp programme suivant:

#include <iostream> 
#include <boost/filesystem.hpp> 
using namespace boost::filesystem; 

int main(int argc, char* argv[]) 
{ 
    if (argc < 2) 
    { 
     std::cout << "Usage: tut1 path\n"; 
     return 1; 
    } 
    std::cout << argv[1] << " " << file_size(argv[1]) << '\n'; 
    return 0; 
} 

utilisant

clang -I /usr/local/Cellar/boost/1.55.0_1/include/ -L /usr/local/Cellar/boost/1.55.0_1/lib/ tut1.cpp 

et il échoue horriblement:

Undefined symbols for architecture x86_64: 
"boost::filesystem::path::codecvt()", referenced from: 
boost::filesystem::path::path<char*>(char* const&,  boost::enable_if<boost::filesystem::path_traits::is_pathable<boost::decay<char*>::type>, void>::type*) in tut1-6a2087.o 
... 
... 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

La liaison semble être le problème parce que si j'appelle l'option -c le fichier objet est créé.

Des idées que diable se passe-t-il?

+2

Essayez reliant les bibliothèques pertinentes aussi, par exemple '-lboost_filesystem'. Voir http://stackoverflow.com/questions/13467072/c-boost-undefined-reference-to-boostsystemgeneric-category/13468280#13468280 – juanchopanza

Répondre

3

Vous souhaitez lier contre le système de fichiers de boost et le système de boost:

-lboost_filesystem -lboost_system 

Ainsi, la commande de compilation complète serait:

clang++ -I /usr/local/opt/boost/include -L /usr/local/opt/boost/lib tut1.cpp -lboost_filesystem -lboost_system 
+0

Cela l'a corrigé. Je vous remercie! – user1654183