【发布时间】:2020-06-17 08:05:47
【问题描述】:
我正在使用 centos 8 海合会
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)
我的 CMake [更新]
cmake_minimum_required(VERSION 3.10)
project(TestProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS " -static -static-libgcc -static-libstdc++ -std=c++17")
add_executable(TestProject main.cpp)
SET(BUILD_SHARED_LIBS OFF)
#--------------- Static Includes -----------------
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
set(PHTREADS_LIB "-lphreads")
#----- Include Curl
set(CURL_LIBRARY "-lcurl")
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(TestProject ${CURL_LIBRARIES} ${PHTREADS_LIB})
问题 [已更新
/usr/bin/ld: cannot find -lcurl
/usr/bin/ld: cannot find -lphreads
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
gmake[3]: *** [CMakeFiles/TestProject.dir/build.make:84: TestProject] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:68: CMakeFiles/TestProject.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/TestProject.dir/rule] Error 2
我的主要目标是尝试将 (libgcc libstdc++) 添加为静态。
有人可以指导我做错了什么吗?
谢谢
【问题讨论】:
-
[root@centos8dev ~]# find /usr/lib* -name 'libstdc++*.a' /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++fs.a /usr/lib/gcc/x86_64-redhat-linux/8/32/libstdc++.a /usr/lib/gcc/x86_64-redhat-linux/8/32/libstdc++fs.a /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.a -
您可以对
libm.a和libc.a进行相同的搜索以确保。 -
欢迎来到 Stack Overflow!除了 CMake 文件中的几个过时的 CMake 习惯用法之外,对
target_link_libraries()的调用甚至在定义之前就引用了TestProject,这应该是一个错误。这没有错误吗? -
我不会通过
PTHREADS_LIB变量手动链接-lpthreads,而是将Threads::Threads添加到您的target_link_libraries调用中。这也为编译器设置了必要的定义并添加了包含目录。 -
CURL::libcurl也一样,而不是手动链接。请参阅documentation 了解这些电话。
标签: c++ linux gcc makefile cmake