Une référence indéfinie à pow
ou floor
est souvent causée par une option -lm
manquante ou mal placée (voir this question).autotools - Correction d'une référence indéfinie à `pow 'et` floor'
J'ai vu cette erreur dans un open source repository après l'exécution par le flux de travail autotools: aclocal
autoconf
automake --add-missing
./configure
make
.
Voici la commande build incriminée de la sortie de marque:
gcc -pthread -g -O2 -lm -o 01_w_Defects bit_shift.o main.o buffer_overrun_dynamic.o memory_allocation_failure.o buffer_underrun_dynamic.o memory_leak.o cmp_funcadr.o not_return.o conflicting_cond.o null_pointer.o data_lost.o overrun_st.o data_overflow.o ow_memcpy.o data_underflow.o pow_related_errors.o dead_code.o ptr_subtraction.o dead_lock.o race_condition.o deletion_of_data_structure_sentinel.o redundant_cond.o double_free.o return_local.o double_lock.o sign_conv.o double_release.o sleep_lock.o endless_loop.o st_cross_thread_access.o free_nondynamic_allocated_memory.o st_overflow.o free_null_pointer.o stubs.o func_pointer.o st_underrun.o function_return_value_unchecked.o underrun_st.o improper_termination_of_block.o uninit_memory_access.o insign_code.o uninit_pointer.o invalid_extern_1.o uninit_var.o invalid_extern.o unlock_without_lock.o invalid_memory_access.o unused_var.o littlemem_st.o wrong_arguments_func_pointer.o livelock.o zero_division.o lock_never_unlock.o
Comme vous pouvez le voir, -lm
vient avant tous les fichiers dans la commande build. Cela devrait venir à la fin. Si je déplace -lm
à la fin et réexécutez la commande, cela fonctionne.
Mais cela ne résout pas le problème de la racine. Qu'est ce qui ne s'est pas bien passé? Où dois-je chercher pour trouver le problème ou une solution potentielle? J'imagine que ce problème pourrait être corrigé dans Makefile.am
ou configure.ac
.
Ça marche, merci! Vraisemblablement, on devrait faire la même chose pour le sol? On dirait que c'est 'AC_SEARCH_LIBS' avec un' S'. – jtpereyda
Merci, je continue à faire cette erreur ^^; Et bien, vous pouvez le faire aussi bien pour 'floor', bien que je ne connaisse aucune bibliothèque C dans laquelle' pow' et 'floor' se trouvent sur des bibliothèques différentes. –