gpt4 book ai didi

c++ - CMake 没有按预期链接库(如何强制链接)

转载 作者:行者123 更新时间:2023-11-28 04:04:17 25 4
gpt4 key购买 nike

<分区>

情况:

假设我有 2 个库(libA.a、libB.a)我想在可执行文件 (exec.cpp) 中使用。我的 libA 包含 foo(x),它在 libB 的函数 bar(y) 中使用。因此,我将 libA 的 header 包含在 libB 中,然后将 libB 的 header 包含在我的可执行文件中并链接两者:

A.h:

#ifndef LIB_A_INCLUDED
#define LIB_A_INCLUDED

int foo(int x);

#endif

A.cpp:

int foo(int x) {
//DO stuff
}

B.h

#ifndef LIB_B_INCLUDED
#define LIB_B_INCLUDED

#include <A.h>

int bar(int y);

#endif

B.cpp:

int bar(int y) {
foo(y);
//more stuff
}

两个库的 CMakeLists 文件如下所示(对于 libB,还有一个 include_directories 调用来包含 A.h):

cmake_minimum_required(VERSION 3.15)
project(libA)

set(CMAKE_CXX_STANDARD 14)

add_library(libA A.h A.c)

Exec.cpp:

#include<B.h>

int main() {
bar(42);
return 0;
}

可执行文件的 CMakeLists 文件如下所示:

cmake_minimum_required(VERSION 3.15)
project(Exec)

set(CMAKE_CXX_STANDARD 14)
include_directories("PATH_TO_HEADER_A/A.h" "PATH_TO_HEADER_B/B.h")

add_executable(Exec main.cpp)

target_link_libraries(Exec "PATH_TO_LIB_A/libA.a;PATH_TO_LIB_B/libB.a")

问题

这行不通!它产生:

/usr/bin/ld: PATH_TO_LIB_B/libB.a(B.c.o): in function `bar':

/usr/bin/ld: PATH_TO_LIB_B/B.cpp:95: undefined reference to `foo'

但是,当我将 Exec.cpp 更改为:

#include<B.h>

int main() {
bar(42);
foo(31415);
return 0;
}

按预期编译和工作 - 当 exec.cpp 中没有使用 libA 的函数时,链接器似乎没有链接 libA直接,即使这些函数在 libB 中使用,它肯定使用 foo

问题

有没有办法强制链接?我如何让它发挥作用?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com