Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对CMake中没有完整路径的静态系统库进行链接_Cmake_Static Linking - Fatal编程技术网

针对CMake中没有完整路径的静态系统库进行链接

针对CMake中没有完整路径的静态系统库进行链接,cmake,static-linking,Cmake,Static Linking,在为公共系统库构建CMake find模块时,libatomic,我注意到,如果使用静态库(即libatomic.a)的名称创建一个STATIC IMPORTED目标,然后将其添加到非导入目标(例如foo)的链接库中这种行为并不像预期的那样。例如: add_library(Atomic::atomic STATIC IMPORTED) set_target_properties(Atomic::atomic PROPERTIES IMPORTED_LOCATION "li

在为公共系统库构建CMake find模块时,
libatomic
,我注意到,如果使用静态库(即
libatomic.a
)的名称创建一个
STATIC IMPORTED
目标,然后将其添加到非导入目标(例如
foo
)的
链接库中这种行为并不像预期的那样。例如:

add_library(Atomic::atomic STATIC IMPORTED)
set_target_properties(Atomic::atomic
    PROPERTIES
        IMPORTED_LOCATION "libatomic.a"
)

add_executable(foo)
target_link_libraries(foo
    PRIVATE
        Atomic::atomic
)
我所期望的行为是在Linux上的链接行中添加如下内容:

-Wl,-Bstatic -latomic -Wl,-Bdynamic
或:

但是,当使用
Unix Makefiles
生成器时,我实际看到的是
libatomic.a
作为
foo
的依赖项添加到Makefile中。此外,只需将
libatomic.a
添加到链接行,而不是所需的表单之一。是否有一种方法可以实现我的目标,而无需找到目标库的完整路径,例如
libatomic.a


这样做的基本原理是找到
libatomic.a
的路径并不容易,因为它可能位于某些编译器特定的位置(例如devtoolset位置)

“这样做的基本原理是,找到
libatomic.a
的路径并不容易,因为它可能位于编译器特定的位置(例如devtoolset位置)。“-工具链负责告知CMake系统库的位置。因此,
find_library
应该可以工作。@Tsyvarev这似乎实际上不起作用-例如,如果我尝试
find_library(原子库名称libatomic.a)
它将找不到库,尽管它使用了devtoolset中安装了
libatomic.a
的GCC。还有什么我应该做的吗?可能,您的工具链不太正确,因为它没有提供编译器包含的路径。“其基本原理是,找到
libatomic.a
的路径有点不简单,因为它可能位于编译器特定的位置(例如在devtoolset位置)。”-工具链负责告知CMake系统库的位置。因此,
find_library
应该可以工作。@Tsyvarev这似乎实际上不起作用-例如,如果我尝试
find_library(原子库名称libatomic.a)
它将找不到库,尽管它使用了devtoolset中安装了
libatomic.a
的GCC。还有什么我应该做的吗?也许,您的工具链不太正确,因为它没有提供编译器包含的路径。
-l:libatomic.a