ld找不到-latomic或-lstdc ++

时间:2020-09-15 09:39:07

标签: c++ linux gcc ld

当尝试使用要开发的硬件制造商提供的工具链来编译我的项目时,编译成功,但是链接失败并显示以下错误消息:

/ media / xxx / Data / toolchains / sysroots / x86_64-xxx-linux / usr / bin / arm-xxx-linux-gnueabi /../../ libexec / arm-xxx-linux-gnueabi / gcc / arm-xxx-linux-gnueabi / 4.8.4 / ld:找不到-latomic

/ media / xxx / Data / toolchains / sysroots / x86_64-xxx-linux / usr / bin / arm-xxx-linux-gnueabi /../../ libexec / arm-xxx-linux-gnueabi / gcc / arm-xxx-linux-gnueabi / 4.8.4 / ld:找不到-lstdc ++

但是,当使用相同的编译器和链接器构建小型测试程序时,一切正常。

下面是我的CMake工具链文件的重要部分的摘录:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

###
# Get $CROSS
###
if (NOT $ENV{CROSS_COMPILE} STREQUAL "")
    set(cross $ENV{CROSS_COMPILE}) # WARNING: Ends with a - (minus)
else()
    set(cross "arm-xxx-linux-gnueabi-")
endif()

###
# Set CMake sysroot
###
set(CMAKE_SYSROOT $ENV{SDKTARGETSYSROOT})
set(CMAKE_SYSROOT_LINK $ENV{SDKTARGETSYSROOT})
set(CMAKE_SYSROOT_COMPILE $ENV{SDKTARGETSYSROOT})

set(CMAKE_C_COMPILER $ENV{TOOLCHAIN_TOOLSDIR}/${cross}gcc)
set(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_TOOLSDIR}/${cross}g++)
set(CMAKE_LD $ENV{TOOLCHAIN_TOOLSDIR}/${cross}ld)
set(CMAKE_STRIP $ENV{TOOLCHAIN_TOOLSDIR}/${cross}strip)
set(CMAKE_AR $ENV{TOOLCHAIN_TOOLSDIR}/${cross}ar)

include_directories($ENV{SDKTARGETSYSROOT}/usr/include)

我没有公开源代码的权利,但是源代码在这里不是问题,因为它可以正确编译。

这是CMakeLists.txt文件的另一个MWE:

cmake_minimum_required(VERSION 3.10)

project(xxx LANGUAGES CXX VERSION 2.0.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(TARGET_NAME xxx.bin)

include_directories(
    include/
    ${INCLUDE_DIRS}
)

file(GLOB_RECURSE FILES ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)

if (xxx_DEBUG)
  add_compile_options(
      -Wpedantic
      -DDDC_STUB
      -fabi-version=6
      -Wno-format-security
      -Wno-reorder
      -ggdb3
      -O0
      -fpermissive # Test
      -fPIC

      #-static-libstdc++ # with or without, doesn't change the behaviour
      #-static-libgcc # with or without, doesn't change the behaviour
  )
else()
  add_compile_options(
    -Wpedantic
    -fabi-version=6
    -Wno-format-security
    -Wno-reorder
    -O3
    -fpermissive # Test
    -fPIC

    #-static-libstdc++ # with or without, doesn't change the behaviour
    #-static-libgcc # with or without, doesn't change the behaviour
)
endif()

add_executable(${TARGET_NAME} ${FILES} ${MEMWATCH_FILES})

我尝试为ld设置sysroot参数,我尝试手动指定链接(搜索)路径-L$ENV{SDKTARGETSYSROOT}/usr/lib/.debug,并且还尝试了硬性连接到相关库的路径: $ENV{SDKTARGETSYSROOT}/usr/lib/.debug/libatomic.so.1.0.0

还有另一种方法可以告诉ld使用哪些库? 这与标准工具链完美配合!


编辑:

我现在还尝试通过从.debug / libatomic到usr / lib / libatomic的符号链接来强行强制使用它。这也没有达到预期的效果。

0 个答案:

没有答案
相关问题