2014-09-08 6 views
1

현재 어셈블리 프로그래밍을 배우려고하고 있으며 CMake를 사용하여 프로젝트와 연습을 작성하고 있습니다.CMake : Linux에서 libc에 대한 어셈블리를 연결

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

하지만 난 : 나는 다음과 같은거야

이 책은이 명령 줄 (처음부터 프로그래밍, 8 장)를 사용하여 C 표준 라이브러리와 예제 프로그램 중 하나 링크 나에게 말한다 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 라인을 생략 할 경우, makeprintf-example.s에서 참조 libc의 기능에 '정의되지 않은 참조'오류와 함께 실패합니다. ,

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

uname -m 나에게 i686을 제공합니다

나는 선을 포함하는 경우, make 성공,하지만 난이 프로그램을 실행하려고 할 때 나는

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

file 날이 출력을 제공하는 오류 그래서 나는 다른 아키텍쳐를 위해 libc와 연결한다고 생각하지 않는다.

누군가가 CMake의 C 표준 라이브러리에 대한 어셈블리 프로그램을 연결하는 방법을 알고 있습니까?

+0

1. 어떤 라이브러리도 찾을 수 없습니다. 이는 진단에 도움이됩니다. 2. 어셈블러 프로그램에서 libc를 사용하려면 libc 시작 ('crti.o','crtbegin.o') 및 정리 ('crtn.o','crtend.o')에 사용되는 모듈의 작업을 사용하거나 모방해야합니다. 너무 성가시다. 대신 C 메인()에서 어셈블러를 사용할 수 있습니다. – Netch

답변

1

이 문장을 사용하여 작업 할 수 있지만 그로 인한 개선 사항은 잘 접수 될 것입니다.

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