리눅스 프로젝트를 리눅스로 포팅하는 중입니다. 리눅스 (우분투)에서 빌드 파이프 라인을 배우고 설정하려고합니다. 나는 창문에 clang을 사용하고 우분투에서 코드를 컴파일하기 위해 clang/llvm을 사용하고 싶지만 c 런타임 라이브러리를 내 코드에 연결하는 데 문제가 있습니다. 여기에 내가 터미널에서 위의 코드뿐만 아니라, 플랫폼에 의존하는 코드를 실행 우분투 14.04 LTS를 연타 3.4을 설치 한 후리눅스에서 clang을 C++로 사용할 때 표준 crt를 연결하는 데 문제가 있습니다.
// -- system includes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// -- my includes
#include "crt.h"
int main() {
char title[] = "Text";
int title_length = strlen(title);
// -- sending string and length to platform dependent code
CreateBox(title, title_length);
return(0); }
, 난 그냥 내가 빌드 스크립트를 설정할 수 있습니다 실행하려고하고있는 무슨의 예,
clang++ -c main.cpp box_linux.cpp
파일을 오류없이 컴파일합니다. ,
ld main.o box.o
나는 다음과 같은 오류를 매번 다시 얻을의 내가 연결하려고 할 때 나는 다음과 같은 명령을 사용했다라고 나는의 libC++, 된 libstdC++하지만 아무것도 작동하는 것 같다없는 연결 시도
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
In function 'main':
(.text+0x30): undefined reference to 'strlen'
하자. 나는 매우 신빙성이있다. 매우 리눅스에 익숙하지 않고 리눅스에 clang하기 때문에 나는 사전에 사과한다. stackoverflow뿐만 아니라 Ubuntu의 포럼과 LLVM의 포럼/docs에서 다른 질문을 확인했습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 크게 감사하겠습니다.
빠른 응답을 보내 주셔서 감사합니다. 그리고 나는 그것에 추가 파일이나 적어도 언급을 포함 시켰어야했다. 그건 내 실수 였어. 내 코드 플랫폼을 독립적으로 만들려고하기 때문에 플랫폼 독립적 인 모든 기능 (I/O, 그래픽 등)을 처리하는 공통 파일을 호출하는 엔트리 포인트가 있습니다. 내가 아는 한, clang과 gcc는 하나의 파일에 대해 자동으로 링크되지만 여러 파일에 대해 수행해야합니다. -v 옵션을 사용해 보았지만 '/tmp/string-48040e.o : No such file or directory'를 찾을 수 없다는 오류가 발생했습니다. –
@EditedContent 당신이하고자하는 것을 반영하기 위해 질문을 편집하십시오. –
"clang -o prog main.o file1.o file2.o ..."와 같은 것을 사용하십시오. –