【问题标题】:Linking error using cmake [closed]使用cmake链接错误[关闭]
【发布时间】:2018-07-17 02:50:41
【问题描述】:

我正在使用 cmake 编译一些代码,但遇到了错误。这是我收到的消息:

[ 79%] Linking CXX executable ../release/report_intr_dim
/usr/bin/ld: ../release/libNonMetricSpaceLib.a(pivot_neighb_invindx.cc.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
test/CMakeFiles/report_intr_dim.dir/build.make:99: recipe for target 'release/report_intr_dim' failed
make[2]: *** [release/report_intr_dim] Error 1
CMakeFiles/Makefile2:326: recipe for target 'test/CMakeFiles/report_intr_dim.dir/all' failed
make[1]: *** [test/CMakeFiles/report_intr_dim.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

生成文件:127:

[126]all: cmake_check_build_system
[127]        $(CMAKE_COMMAND) -E cmake_progress_start /home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/CMakeFiles /home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/CMakeFiles/progress.marks
[128]        $(MAKE) -f CMakeFiles/Makefile2 all
[129]        $(CMAKE_COMMAND) -E cmake_progress_start /home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/CMakeFiles 0
[130].PHONY : all

CMakeFiles/Makefile2:326:

[323]# All Build rule for target.
[324]test/CMakeFiles/report_intr_dim.dir/all: lshkit/CMakeFiles/lshkit.dir/all
[325]test/CMakeFiles/report_intr_dim.dir/all: src/CMakeFiles/NonMetricSpaceLib.dir/all
[326]        $(MAKE) -f test/CMakeFiles/report_intr_dim.dir/build.make test/CMakeFiles/report_intr_dim.dir/depend
[327]        $(MAKE) -f test/CMakeFiles/report_intr_dim.dir/build.make test/CMakeFiles/report_intr_dim.dir/build
[328]        @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/CMakeFiles --progress-num=93,94 "Built target report_intr_dim"
[329].PHONY : test/CMakeFiles/report_intr_dim.dir/all
[330]
[331]# Include target in all.
[332]all: test/CMakeFiles/report_intr_dim.dir/all
[333]
[334].PHONY : all

test/CMakeFiles/report_intr_dim.dir/build.make:99:

[88]# External object files for target report_intr_dim
[89]report_intr_dim_EXTERNAL_OBJECTS =
[90]
[91]release/report_intr_dim: test/CMakeFiles/report_intr_dim.dir/report_intr_dim.cc.o
[92]release/report_intr_dim: test/CMakeFiles/report_intr_dim.dir/build.make
[93]release/report_intr_dim: release/libNonMetricSpaceLib.a
[94]release/report_intr_dim: release/liblshkit.a
[95]release/report_intr_dim: /usr/lib/x86_64-linux-gnu/libboost_system.so
[96]release/report_intr_dim: /usr/lib/x86_64-linux-gnu/libboost_filesystem.so
[97]release/report_intr_dim: /usr/lib/x86_64-linux-gnu/libboost_program_options.so
[98]release/report_intr_dim: test/CMakeFiles/report_intr_dim.dir/link.txt
[99]        @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable ../release/report_intr_dim"
[100]       cd /home/safarisoul/nns_benchmark-master/algorithms/NMSLIB/code/test && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/report_intr_dim.dir/link.txt --verbose=$(VERBOSE)

我进行了谷歌搜索,并意识到我需要在某处添加“-pthread”,我可能应该在CMakeLists.txt 中修改一些内容。但这是我第一次使用cmake,对c/c++不熟悉。我不知道该怎么做才能解决这个问题。请帮忙。

【问题讨论】:

  • "我在 google 上搜索了一下,发现我需要在某处添加 '-pthread',我可能应该在 CMakeLists.txt 中修改一些内容。" - 确切地。将该问题报告给项目的开发人员。 (在这里我们可以帮助您修复您的代码,如果您能够将其最小化以显示问题。但修复其他项目并不是 Stack Overflow 的目的。您显示的是生成的makefile。但问题出在一个 CMakeLists.txt文件中。)
  • 你可能不会target_link_libraries反对pthread
  • 请告诉我们您的CMakeLists.txt

标签: c++ makefile cmake linker pthreads


【解决方案1】:

假设这确实与缺少的 pthread 链接,这是当前应该如何在 CMakeLists.txt 中完成的方式:

find_package(Threads REQUIRED)
[..]
target_link_libraries(target [SCOPE] Threads::Threads)

【讨论】:

    【解决方案2】:

    使用CMake链接pthreads

    find_package(Threads REQUIRED) target_link_libraries(NonMetricSpaceLib Threads::Threads)

    如果你有多个线程库,可以尝试设置CMAKE_THREAD_PREFER_PTHREADTHREADS_PREFER_PTHREAD_FLAG

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2015-12-26
      • 2019-01-01
      • 1970-01-01
      相关资源
      最近更新 更多