2 votes

Compilation des frameworks (cppunit, boost, ++) depuis le terminal pour fonctionner avec Xcode 4.6

J'essaie d'utiliser quelques frameworks avec Xcode 4.6.2. Les frameworks C++, tels que cppunit et boost qui sont censés être compilés et liés à mes projets échouent toujours avec "Undefined symbols for architecture x86_64[...]" ou i386 d'ailleurs lorsque j'essaie différents paramètres de compilation.

J'ai essayé de paramétrer le compilateur sur clang et g++ avec différents jeux de drapeaux d'architecture de processeur (64, 32 et 32_64). J'en suis arrivé à un point où je n'arrive pas à trouver de solution par moi-même.

J'ai également essayé les paquets de sécurité sans succès :
brew install cppunit universal
port install cppunit +universal (Egalement sans succès la bibliothèque Boost)

En outre, de nombreux essais sur Boost sont effectués. Bjam a vraiment fait beaucoup de travail ces dernières 24 heures. De multiples réglages ont été essayés :
http://www.codeproject.com/Tips/555070/Boost-vs-OSX-iOS-XCode
y http://boost.2283326.n4.nabble.com/Errors-compiling-Boost-Log-on-OS-X-tp4646151p4646299.html
Et plus encore par pur tâtonnement de ma part.

Ma question est donc la suivante : quelles sont les combinaisons de compilateur et d'éditeur de liens et les drapeaux respectifs que je dois utiliser pour que cela fonctionne dans mes projets Xcode ?

A la demande de Captain Obvlious, voici quelques erreurs lors de l'exécution d'une application avec Boost::Test :

Undefined symbols for architecture x86_64:
  "boost::test_tools::tt_detail::check_impl(boost::test_tools::predicate_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)", referenced from:
      my_test::test_method() in main.o
  "boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)", referenced from:
      my_test::test_method() in main.o
  "boost::unit_test::framework::master_test_suite()", referenced from:
      init_unit_test_suite(int, char**) in main.o
  "boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&)", referenced from:
      boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>) in main.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)", referenced from:
      ___cxx_global_var_init2 in main.o
  "boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>) in main.o
  "vtable for boost::unit_test::unit_test_log_t", referenced from:
      boost::unit_test::unit_test_log_t::unit_test_log_t() in main.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

0voto

Dylan_Larkin Points 305

Vous devez ajouter la bibliothèque dont dépendent ces fonctions via "Link Binary With Libraries" dans les phases de construction de votre projet. Cependant, cela fait apparaître le redoutable EXC_BAD_ACCESS que vous pouvez lire ailleurs sur Stack.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X