2014-04-17 2 views
2

Je courais QtCreator sur Mac ... Je veux commencer à travailler sur les bibliothèques Boost ... Alors, j'ai installé les bibliothèques Boost utilisantQt Creator sur Mac et stimuler les bibliothèques

brew install boost 

Après que j'ai créé un petit stimuler Hallo programme mondial et apporté les modifications dans le fichier .pro comme suit

TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

unix:INCLUDEPATH += "/usr/local/Cellar/boost/1.55.0_1/include/" 
unix:LIBPATH += "-L/usr/local/Cellar/boost/1.55.0_1/lib/" 

SOURCES += main.cpp 

LIBS += \ 
-lboost_date_time \ 
-lboost_filesystem \ 
-lboost_program_options \ 
-lboost_regex \ 
-lboost_signals \ 
-lboost_system 

Je suis toujours incapable de construire ... Qu'est-ce que pourrait être la raison? S'il vous plaît me suggérer ce qui pourrait être l'erreur possible ...

Les erreurs sont

library not found for -lboost_data_time 
linker command failed with exit code 1 (use -v to see invocation) 
+0

quels sont les messages d'erreur ?, vous devez exécuter qmake avant de pouvoir construire avec la modification .pro. –

+0

: -1: erreur: bibliothèque introuvable pour -lboost_regex – Satya

+0

vous devez compiler les binaires de boost (ou vérifier que ceux dont vous avez besoin sont présents) –

Répondre

5

Cela prend un peu de la réponse de Uflex, comme il a manqué quelque chose. Alors gardez le même code:

//make sure that there is a boost folder in your boost include directory 
#include <boost/chrono.hpp> 
#include <cmath> 

int main() 
{ 
auto start = boost::chrono::system_clock::now(); 

    for (long i = 0; i < 10000000; ++i) 
     std::sqrt(123.456L); // burn some time 

    auto sec = boost::chrono::system_clock::now() - start; 
    std::cout << "took " << sec.count() << " seconds" << std::endl; 

    return 0; 
} 

Mais laisse changer .pro un peu:

TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 

macx { 
    QMAKE_CXXFLAGS += -std=c++11 

    _BOOST_PATH = /usr/local/Cellar/boost/1.55.0_1 
    INCLUDEPATH += "$${_BOOST_PATH}/include/" 
    LIBS += -L$${_BOOST_PATH}/lib 
    ## Use only one of these: 
    LIBS += -lboost_chrono-mt -lboost_system # using dynamic lib (not sure if you need that "-mt" at the end or not) 
    #LIBS += $${_BOOST_PATH}/lib/libboost_chrono-mt.a # using static lib 
} 

La seule chose que j'ajouter à cela le système d'amplification (-lboost_system) Cela devrait résoudre le problème avec sa version originale provoquant les symboles indéfinis, et vous permet d'ajouter vos autres bibliothèques.

Comme -lboost_date_time, qui pour moi fonctionnait parfaitement avec l'installation de brassage.

Certes, mon chemin est en fait: /usr/local/Cellar/boost/1.55.0_2

0

bibliothèques Boost sont modularisé, il vous suffit de créer un lien avec les bibliothèques que vous utilisez. Certaines bibliothèques sont header only, donc vous n'avez pas besoin de faire quoi que ce soit, avoir un boost accessible dans votre chemin est suffisant.

Vous pouvez essayer de compiler ceci:

//make sure that there is a boost folder in your boost include directory 
#include <boost/chrono.hpp> 
#include <cmath> 

int main() 
{ 
    auto start = boost::chrono::system_clock::now(); 

    for (long i = 0; i < 10000000; ++i) 
     std::sqrt(123.456L); // burn some time 

    auto sec = boost::chrono::system_clock::now() - start; 
    std::cout << "took " << sec.count() << " seconds" << std::endl; 

    return 0; 
} 

Et dans le fichier .pro:

TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp 

macx { 
    QMAKE_CXXFLAGS += -std=c++11 

    _BOOST_PATH = /usr/local/Cellar/boost/1.55.0_1 
    INCLUDEPATH += "$${_BOOST_PATH}/include/" 
    LIBS += -L$${_BOOST_PATH}/lib 
    ## Use only one of these: 
    LIBS += -lboost_chrono-mt # using dynamic lib (not sure if you need that "-mt" at the end or not) 
    #LIBS += $${_BOOST_PATH}/lib/libboost_chrono-mt.a # using static lib 
} 
+0

symboles non définis f ou x86_64 architecture: "boost :: système :: system_category()", référencé à partir de: ___cxx_global_var_init3 dans main.o "boost :: système :: generic_category()", référencé à partir de: ___cxx_global_var_init1 dans main.o ___cxx_global_var_init2 ld: symbole (s) introuvable pour architecture x86_64 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation) make: *** [HalloWorld-Boost] Erreur 1 20:11:47: Le processus "/ usr/bin/make" est sorti avec le code 2. – Satya

+0

J'ai bien compris les changements que vous avez faits mais je reçois toujours les erreurs de compilation adobe. – Satya