解决CMake编译错误:ld: attempted static link of dynamic object

在使用CMake构建项目时,您可能会遇到类似 'ld: attempted static link of dynamic object' 的错误信息。这通常是因为您试图将动态库静态链接到您的项目中。

为了解决这个问题,您需要指示链接器使用共享库。您可以使用CMake的CMAKE_SHARED_LINKER_FLAGS变量来实现这一点。

以下是将-shared标志添加到CMAKE_SHARED_LINKER_FLAGS变量的示例:

set(CMAKE_SHARED_LINKER_FLAGS '${CMAKE_SHARED_LINKER_FLAGS} -shared')

将此代码添加到您的CMakeLists.txt文件中,将会告诉链接器在链接时使用共享库。

针对特定构建类型设置链接器参数

如果您只想在特定的构建类型中使用这些参数,可以使用条件语句。例如,以下代码将仅在Release构建类型中使用-shared标志:

if(CMAKE_BUILD_TYPE STREQUAL 'Release')
  set(CMAKE_SHARED_LINKER_FLAGS '${CMAKE_SHARED_LINKER_FLAGS} -shared')
endif()

重要提示

请注意,CMAKE_SHARED_LINKER_FLAGS变量只会影响使用CMake构建的目标,而不会直接影响外部命令(例如make或ninja)的链接器参数。如果您使用外部命令构建项目,请确保将所需的链接器参数传递给外部命令。

解决CMake编译错误:ld: attempted static link of dynamic object

原文地址: http://www.cveoy.top/t/topic/fCl5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录