首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动工具-修正对“`pow”和“地板”的未定义引用

自动工具-修正对“`pow”和“地板”的未定义引用
EN

Stack Overflow用户
提问于 2016-06-09 23:11:19
回答 1查看 344关注 0票数 0

powfloor的未定义引用通常是由丢失或错误放置的-lm选项引起的(参见这个问题)。

在运行autotools工作流:aclocal autoconf automake --add-missing ./configure make之后,我在一个autoconf中看到了这个错误。

下面是make输出中违规的build命令:

代码语言:javascript
复制
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

如您所见,-lm位于build命令中的所有文件之前。它应该在最后出现。如果我将-lm移到末尾并重新运行命令,它就能工作。

但这并不能解决根本问题。哪里出了问题?我应该在哪里找到问题或潜在的解决办法?我认为这个问题可以在Makefile.amconfigure.ac中解决。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-10 07:51:26

您将-lm作为一个LDFLAGS条目传递;它不是,而是一个LIBS条目。解决这个问题的简单方法是完全避免在-lm中引用Makefile.am,而是将其添加到configure.ac中。

代码语言:javascript
复制
AC_SEARCH_LIBS([pow], [m])

这样,如果在C库中定义了pow (很少见,但在这种情况下会出现一些OSes ),则不会向LIBS添加任何内容,而如果是在libm中定义的,则LIBS将被设置为-lm;因为LIBS是在文件列表之后传递的,所以链接将正常工作。

进一步参考(由我在过去写):在Autotools Mythbuster上寻找图书馆和连接顺序

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37737620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档