我正在尝试学习汇编编程,我正在使用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标准库链接?
答案 0 :(得分:1)
目前我可以使用此声明,但是对它的任何改进都会很受欢迎。
set_target_properties(
printf-example
PROPERTIES
LINK_FLAGS "-lc -dynamic-linker /lib/ld-linux.so.2"
)