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

我在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’的未定义引用,因为它似乎无法将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生成的命令进行比较.

上一篇:学习《深度学习与计算机视觉算法原理框架应用》《大数据架构详解从数据获取到深度学习》PDF代码


下一篇:【QT笔记】Linux下QT编程pro文件所需库