CMake:在Linux上将程序集与libc相关联

时间:2014-09-08 16:18:31

标签: assembly x86 cmake libc

我正在尝试学习汇编编程,我正在使用CMake来构建我的项目和练习。

我跟随的书告诉我使用此命令行将其中一个示例程序与C标准库链接起来(从头开始编程,第8章):

ld printf-example.o -o printf-example -lc -dynamic-linker /lib/ld-linux.so.2

但我不确定如何在CMake中复制这种行为。

目前,我的CMake文件如下所示:

project(ch8)

enable_language(ASM-ATT)

include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include)

add_executable(printf-example printf-example.s)
target_link_libraries(printf-example c)

如果我不在target_link_libraries行,make将失败并显示未定义的引用' printf-example.s中引用的libc函数的错误。

如果我包含该行,make成功,但当我尝试运行该程序时,我收到错误

bash: ./printf-example: No such file or directory

file给了我这个输出:

printf-example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), \
dynamically linked (uses shared libs), not stripped

uname -m给了我i686,所以我不认为我会针对不同架构的libc进行链接。

有没有人知道如何将汇编程序与CMake中的C标准库链接?

1 个答案:

答案 0 :(得分:1)

目前我可以使用此声明,但是对它的任何改进都会很受欢迎。

set_target_properties(
    printf-example
    PROPERTIES
    LINK_FLAGS "-lc -dynamic-linker /lib/ld-linux.so.2"
)