【问题标题】:How to find -lm lib and include it in CMake? [duplicate]如何找到 -lm lib 并将其包含在 CMake 中? [复制]
【发布时间】:2019-09-23 14:31:32
【问题描述】:

我正在使用 CMake 来构建我的项目。它显示错误

./../x86_64-conda_cos6-linux-gnu/bin/ld: /home/lee/bin/ants/lib/libitkgdcmopenjp2-5.0.a(tcd.c.o): 在函数'opj_tcd_init_encode_tile'中: tcd.c:(.text+0x1d42): undefined reference to '__pow_finite'

我用谷歌搜索,它说我必须包含额外的库,即数学库 lm。我尝试了两种方法:

  1. 使用cmake CMAKE_SHARED_LINKER_FLAGS="-lm" .. 构建但是,它不起作用

  2. 在 CMakeLists.txt 中添加 lmtarget_link_libraries(lm myprogram ${ITK_LIBRARIES})。但它显示错误Cannot specify link libraries for target "lm" which is not built by this project.

你能告诉我任何修复它的建议吗?

【问题讨论】:

    标签: c++ cmake ubuntu-16.04


    【解决方案1】:
    target_link_libraries(lm myprogram ${ITK_LIBRARIES})
    

    You got the order wrong。这要求将 lm 与库 libmyprogram 以及 ITK_LIBRARIES 中包含的任何内容链接起来。


    试试:

    target_link_libraries(myprogram m)
    

    要求 cmake 将 myprogramlibm 链接。这意味着 libm 安装在系统目录中。如果不是,您必须:

    【讨论】:

    • 感谢 YSC。我可以成功构建 cmake 但它在 make 中显示错误。我认为我们应该添加一个命令来查找lm lib。这是运行 make /home/lee/anaconda3/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld: cannot find -llm 时的错误
    • 库的名称是m。因此它是target_link_libraries(myprogram m)
    • l (L) 中的 lm 是不必要的链接器参数语法的一部分。 m 是库的名称,因此对于 CMake,target_link_libraries(myprogram m ...) 就足够了。
    • 谢谢。我尝试了stackoverflow.com/questions/32816646/… 的解决方案,但它不起作用。请注意,libm 位于/lib/x86_64-linux-gnu/libm.so.6
    猜你喜欢
    • 2013-06-08
    • 2018-12-28
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多