gpt4 book ai didi

linux - 使用依赖于另一个库的库的 CMake 项目

转载 作者:可可西里 更新时间:2023-11-01 11:50:31 25 4
gpt4 key购买 nike

我在 Linux 64 位上使用 CMake 时遇到问题。我在 C 中有一个示例,它必须链接到一个库 (xr_arp.a),该库对另一个库 (libcrypto.a) 具有链接依赖性。我为构建示例代码所做的以下 makefile 已成功链接:

CFLAGS = -I../Common -I../xr -I../../../openssl/include
LIBS = ../xr/xr_arp.a ../../../openssl/lib/libcrypto.a
TARGET = sample
OBJFILES = sample.o

all: $(TARGET)

$(TARGET): Makefile $(OBJFILES)
$(CC) -o $@ $(OBJFILES) $(LIBS)

clean:
rm -rf *.o $(TARGET)

.SUFFIXES: .c .o

.c.o:
$(CC) -Wall $(CFLAGS) -c $<

但是,我想将此 makefile 转换为使用 CMake。当我使用以下 CMakeLists.txt 文件时,我发现 xr_arp.c 对“SHA1”有 undefined reference ,因为它似乎无法将 xr_arp.a 链接到 libcrypto.a:

cmake_minimum_required(VERSION 2.8)
project (SAMPLE C)

set(CMAKE_C_FLAGS "-Wall")

include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../Common
${CMAKE_CURRENT_SOURCE_DIR}/../xr
)

add_executable(
sample
sample.c
)

target_link_libraries(
sample
${CMAKE_CURRENT_SOURCE_DIR}/../../../openssl/lib/libcrypto.a
${CMAKE_CURRENT_SOURCE_DIR}/../xr/xr_arp.a
)

有人可以指出这两个文件之间的区别吗?为什么它使用 makefile 而不是使用 CMake?有什么程序可以用来强制 xr_arp.a 和 libcrypto.a 之间的链接吗?请注意,这两个库都是第三方的,不是我的。

最佳答案

您是否尝试过切换库在 TARGET_LINK_LIBRARIES 中指定的顺序?在许多情况下,它不应该有什么不同,但我遇到过某些链接器有影响的情况。我相信 Linux 上的 GNU 链接器是一个与众不同的例子。

我认为 xr_arp.a 应该首先出现,以便链接器知道在它后面的库中查找 SHA1。

如果失败,请尝试运行“make VERBOSE=1”并将 CMake 生成的链接器命令与 Makefile 生成的链接器命令进行比较。

关于linux - 使用依赖于另一个库的库的 CMake 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263063/

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