2014-02-24 6 views
2

Linux에서 Qt 5.2.1과 함께 QtCreator 3.0.1을 사용하는 동안 문제가 있습니다. QtCreator '빌드'함수를 사용하여 내 프로젝트를 컴파일하려면 노력하고있어, 나는 qmake project.pro 실행하고 make 실행되는 상상. 내 프로젝트는 정적 라이브러리 (.a)로 컴파일 된 QScintilla를 사용하고 내 프로젝트 디렉토리에 qscintilla/Qt4Qt5에 포함 시켰습니다. 컴파일이 완료되면QtCreator - 정적 라이브러리에 연결할 수 없습니다 (ld 오류)

는 컴파일 출력 창을 보여줍니다 다음

/usr/bin/ld: cannot find -lqscintilla2 
collect2: error: ld returned 1 exit status 

.pro 파일이 포함되어 비아 프로젝트의 루트 디렉토리에 다음 qmakemake을 실행 그러나

LIBS += -Lqscintilla/Qt4Qt5 -lqscintilla2 

, 터미널 에뮬레이터가 완벽하게 작동하고 프로젝트가 성공적으로 컴파일 및 연결됩니다. qscintilla/Qt4Qt5 디렉토리에 libqscintilla2.a이라는 파일이 두 번 있음을 확인했습니다. 정적 라이브러리를 연결하기 위해 귀하의 .PRO 파일에

PRE_TARGETDEPS += qscintilla/Qt4Qt5/libqscintilla2.a 

:

+0

-l에 대한 절대 경로를 시도한 적이 있습니까? 예 : -lqscintilla/Qt4Qt5/libqscintilla2.a? 전체 링커 출력이 실행하려고하는 것을 보여주십시오. – lpapp

+0

qscintilla 라이브러리를 프로젝트의 일부로 만들거나 정적 라이브러리로 포함하려고합니까? 후자를 할 이유가 없다. – lpapp

+0

@LaszloPapp는 불행히도 작동하지 않았습니다. 내가 이상한 점은 터미널을 통해'make '를 실행하는 것은 똑같은'.pro' 파일과 모든 것을 사용한다는 것입니다. –

답변

1

Linux를 사용하는 것 같으므로 배포판에 패키지를 두는 것이 좋습니다. 패키지를 설치하면 시스템에 정적 라이브러리를 가져 오는 것이 "바닐라"가됩니다.

그러나 프로젝트 빌드 원칙을 따르려면 섀도우 빌드를 사용하지 않도록 설정하고 자체 제한 사항이있는 다른 해결 방법을 만드는 것이 좋습니다.

예를 들어 $$OUT_PWD variable을이 용도로 사용할 수 있지만 일반적으로 구성 요소간에 대상 종속성을 지정해야합니다.

그래서, 당신이 다음과 같이 뭔가를 쓰는 것입니다 :

LIBS += -L$$OUT_PWD/qscintilla/Qt4Qt5 -lqscintilla2 

이이 디렉토리 레이아웃을 기반으로 조정하여주십시오.

+0

네, 이것이 더 나은 해결책입니다. 어떤 이유로'OUT_PWD'를 사용하는 것이 효과적이지 않지만'_PRO_FILE_PWD_'가 (그림자 빌드가 가능한 상태에서) 수행되었습니다. 편집 : 나는 qmake의'message()'함수를 사용하여 변수를 출력하려고 시도했다.'PWD'와'_PRO_FILE_PWD_'는 프로젝트의 원래 루트 디렉토리를 가르키고,'OUT_PWD'는 Qt가 생성 한 것을 가리킨다. –

0

또한 줄을 추가해야합니다.

+0

@LaszloPapp 더 나은 옵션은 무엇입니까? 지금 당장은 QScintilla의 최신 버전을 다운로드하여 프로젝트 디렉토리에 저장하고, 컴파일하고 정적으로 링크 할 수 있습니다. 필자가 새 버전을 출시하면 파일을 쉽게 대체 할 수 있으므로 매우 실용적입니다. –

0

QtCreator에서 왼쪽 패널의 "Projects"를 클릭하면 빌드/실행/스타일 옵션을 편집 할 수있는 탭이 열립니다. 빌드/일반 섹션에서 "섀도우 빌드"를 비활성화하십시오. 그러면 원래 프로젝트 디렉토리에 프로젝트가 빌드됩니다.

편집 : 더 나은 해결책을 보려면 @ LaszloPapp의 대답을 참조하십시오.

+0

이것은 해결 방법 인 것처럼 보이지만 그림자 빌드도 사용하지 않도록 설정합니다. 어쨌든, 나는 여전히 그 질문에 +1을 주었다. :-) – lpapp