Construire des bibliothèques statiques sur Mac en utilisant CMake et GCC?
Salutations à tous,
J'ai une bibliothèque statique, qui plus tard, j'ai un lien avec ma demande. Mon environnement de développement est CMake, GCC (Linux, Mac), MinGW (Windows).
Je peux compiler la bibliothèque statique sans aucun problème sur Linux et Windows. (Je peux même construire des bibliothèques partagées dans mon application sur Mac).
EDIT: j'ai compilé la bibliothèque en tant que bibliothèque PARTAGÉE et il a bien fonctionné!!
J'ai configuré CMakeFile comme suit pour construire la bibliothèque statique:
add_library(centi STATIC ${base_srcs} ${crv_srcs} ${node_srcs} ${trnk_srcs} ${defl_srcs} ${infl_srcs} ${track_srcs} ${callback_srcs} ${extract_srcs})
Lors de la liaison de la phase, il donne suite à des erreurs et de construire la "libcenti."en quelque sorte.
Linking C static library
lib/libcenti.a /usr/bin/ranlib: file:
lib/libcenti.a(crv_in_rgn_to_bnry_img.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_by_circle.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_flgs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_nodal_interval_min_and_max.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_remove_all_nodes.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_reset_nodal_forces.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_center_coords.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_left_ptch_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_out_rgn_mean_and_var.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_para.c.o) has
no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_right_ptch_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_to_in_rgn_hist.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_to_out_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_initialize_by_circle.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_initialize_by_image_frame.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_stk_paint_nodes_and_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_stk_to_inner_defl_ordn.c.o)
has no symbols
Mais quand j'ai le lien ci-dessus de la bibliothèque avec ma demande, il donne "des symboles non définis" erreurs:
Undefined symbols:
"_setActiveDrawingTrunk", referenced
from:
RzPluginAlgoCnty::initCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::clearCallBacks()
in RzPluginAlgoCnty.cpp.o
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_extract_contour_update_tracking in
libcenti.a(extract_contour_update_tracking.c.o)
_extract_contour_update_tracking in
libcenti.a(extract_contour_update_tracking.c.o)
"_updateCurveUICallBack", referenced
from:
RzPluginAlgoCnty::initCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::initBulkCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::clearCallBacks()
in RzPluginAlgoCnty.cpp.o
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_crv_update_1time in libcenti.a(crv_update_ordn.c.o)
_crv_update_1time in libcenti.a(crv_update_ordn.c.o) ld:
symbol(s) not found
Des conseils à donner ? Dois-je ajouter de tout les paramètres spéciaux lors de la construction de bibliothèques statiques sur Mac?
EDIT:
J'ai compilé la bibliothèque en tant que bibliothèque PARTAGÉE et il a bien fonctionné!!
source d'informationauteur Ashika Umanga Umagiliya
Vous devez vous connecter pour publier un commentaire.
Le même problème avec les bibliothèques statiques sur MacOSX est discuté ici: http://lists.macosforge.org/pipermail/macports-tickets/2008-June/010680.html
Essayer de faire un nettoyage complet et exécuter un pas en parallèle de construire.
Et ce guide recommande d'installer macports, puis "sudo port install autogen autoconf automake nano libtool libsdl patchutils subversion wget gmake", puis export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
Malheureusement, réglage -no_warning_for_no_symbols peut-être pas assez. Le ar commande sur le Mac exécuter ranlib pour vous, ce qui provoque l' "n'a pas de symboles /usr/bin/ranlib" message à afficher. Vous pouvez arrêter ce message sur le Mac à l'aide de la suite de CMake règles:
La ARCHIVE_CREATE "Scr" paramètre garder ar de l'exécution de ranlib pour vous. Le ARCHIVE_FINISH réglage gag ranlib de se plaindre de symboles manquants.
Vous avez besoin d'utiliser les deux ensembles de règles de gag "pas de symboles" message.
Une chose de plus pour CMake débutants: Les commandes CMake génère pour l' ar et ranlib commandes sont déversés dans un link.txt fichier. Si vous rencontrez des problèmes de production des archives, vous pouvez regarder la link.txt pour voir ce que CMake est fait pour vous.
Les mises en garde de
ranlib
indiquent que ces fichiers objet contenait pas de code opérationnel. Vous devez examiner chaque fichier source correspondant à voir si le code qu'il contient doivent être compilé sur Mac. Il se peut que le code a été adapté par ailleurs, mais la compilation conditionnelle ne reconnaît pas Mac correctement.Ce n'est pas un "slam dunk" diagnostic; les symboles manquants sont clairement en deux groupes - ceux liés à la
trnk
et ceux liés à lacrv
- et les fichiers sont de la même façon dans les deux groupes (préfixétrnk
etcrv
), mais il pourrait être que les fichiers de définir des fonctions différentes. Donc, je voudrais aller la chercher à la source les fichiers correspondant à l'objet vide fichiers et voir si vous pouvez voir les fonctions manquantes (probablement ignorer le trait de soulignement sur les portées disparues noms de symbole). Si ces fonctions sont définies dans les fichiers, alors vous avez à regarder les plaintes deranlib
.À l'occasion, si vous avez manqué de l'espace disque à un moment gênant, vous pouvez avoir zéro-taille des fichiers objets (qui ne contiennent pas de symboles, donc). Dans ce cas, il suffit de supprimer le vide fichiers objets (et de libérer de l'espace, mais vous devez avoir déjà fait) et de construire à nouveau.