2013-01-15 2 views
0

동시에 개발중인 다른 라이브러리를 사용하는 응용 프로그램을 작성하고 있습니다. 이것은 QtCreator가 제거 된 헤더로 인해 프로젝트 빌드가 실패하게되는 지점으로 라이브러리가 절대로 변경되지 않을 것으로 예상하고 라이브러리에 정상적으로 컴파일 되어도 새 클래스가 정의되지 않은 것으로보고되는 문제를 만듭니다. 이게 뭐야? 마치 실제로 도서관을 보지 않는 것과 같습니다. 내 라이브러리에 최신 추가 기능을 사용하도록 강제 할 수있는 방법이 있습니까? 여기 Qt Creator 정의되지 않은 기존 클래스에 대한 참조

QT  += core gui opengl 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = BlockEditor 
TEMPLATE = app 


SOURCES += main.cpp\ 
    mainwindow.cpp \ 
    openglqt.cpp \ 
    tilelabel.cpp 

HEADERS += mainwindow.h \ 
    openglqt.h \ 
    tilelabel.h 

FORMS += mainwindow.ui 

LIBS += -L/usr/local/lib -lGLU -lGLEW 

QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs 
QMAKE_RPATH= 

release { 
    LIBS += -L$$PWD/../drEngine/bin/Release/ -ldrEngine 
} 
debug { 
    LIBS += -L$$PWD/../drEngine/bin/Debug/ -ldrEngine 
} 

INCLUDEPATH += $$PWD/../drEngine 
DEPENDPATH += $$PWD/../drEngine 

QMAKE_CXXFLAGS += -std=c++11 

도서관

내가 그것을 사용하여 라이브러리와 응용 프로그램을 개발의 고통을 알고 코드 :: 블록

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<CodeBlocks_project_file> 
    <FileVersion major="1" minor="6" /> 
    <Project> 
     <Option title="Dark Realms Engine" /> 
     <Option pch_mode="2" /> 
     <Option compiler="gcc" /> 
     <Build> 
      <Target title="Debug"> 
       <Option output="bin/Debug/drEngine" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="1" extension_auto="1" /> 
       <Option object_output="obj/Debug/" /> 
       <Option type="3" /> 
       <Option compiler="gcc" /> 
       <Option createDefFile="1" /> 
       <Option createStaticLib="1" /> 
       <Compiler> 
        <Add option="-g" /> 
       </Compiler> 
      </Target> 
      <Target title="Release"> 
       <Option output="bin/Release/drEngine" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="1" extension_auto="1" /> 
       <Option object_output="obj/Release/" /> 
       <Option type="3" /> 
       <Option compiler="gcc" /> 
       <Option createDefFile="1" /> 
       <Option createStaticLib="1" /> 
       <Compiler> 
        <Add option="-O3" /> 
       </Compiler> 
       <Linker> 
        <Add option="-s" /> 
       </Linker> 
      </Target> 
     </Build> 
     <Compiler> 
      <Add option="-std=c++11" /> 
      <Add option="-Wall" /> 
     </Compiler> 
     <Unit filename="Block.cpp" /> 
     <Unit filename="Block.hpp" /> 
     <Unit filename="BlockList.cpp" /> 
     <Unit filename="BlockList.hpp" /> 
     <Unit filename="Camera2D.cpp" /> 
     <Unit filename="Camera2D.hpp" /> 
     <Unit filename="Camera3D.cpp" /> 
     <Unit filename="Camera3D.hpp" /> 
     <Unit filename="Entity.hpp" /> 
     <Unit filename="Includes.hpp" /> 
     <Unit filename="RenderInfo.cpp" /> 
     <Unit filename="RenderInfo.hpp" /> 
     <Unit filename="Renderer.cpp" /> 
     <Unit filename="Renderer.hpp" /> 
     <Unit filename="Scene.cpp" /> 
     <Unit filename="Scene.hpp" /> 
     <Unit filename="TextureAtlas.cpp" /> 
     <Unit filename="TextureAtlas.hpp" /> 
     <Unit filename="dr.hpp" /> 
     <Unit filename="isoMap.cpp" /> 
     <Unit filename="isoMap.hpp" /> 
     <Extensions> 
      <envvars /> 
      <code_completion /> 
      <lib_finder disable_auto="1" /> 
      <debugger /> 
      <DoxyBlocks> 
       <comment_style block="0" line="0" /> 
       <doxyfile_project /> 
       <doxyfile_build /> 
       <doxyfile_warnings /> 
       <doxyfile_output /> 
       <doxyfile_dot /> 
       <general /> 
      </DoxyBlocks> 
     </Extensions> 
    </Project> 
</CodeBlocks_project_file> 
+0

그리고 예. Qt 응용 프로그램의 libs 폴더는 비어있어 LIBS 경로에서 라이브러리를 사용하도록 강제 설정됩니다. 라이브러리는 다시 빌드 될 때마다 업데이트됩니다. – Katherine1

답변

1

에 걸쳐 개발 .PRO 응용 프로그램입니다.

업데이트를 모두 다시 컴파일 하시겠습니까? - 보통 qt creator는 현재 프로젝트 만 업데이트합니다. 'Project'화면과 'Dependencies'탭으로 이동하면 QtCreator가 다른 프로젝트에 의존한다는 것을 알 수 있습니다. 항상 동기화 상태를 유지해야합니다.

라이브러리가 아직 개발중인 경우 마지막 라이브러리를 응용 프로그램 폴더에 복사하지 마십시오. 가장 좋은 방법은 라이브러리를 원래 위치에서 응용 프로그램 디렉토리로 심볼릭 링크하는 것입니다. Windows의 최신 버전조차도 요즘에는 심 링크를 제공하지 않으므로 (이렇게 직접 시도하지는 않으므로) 이런 식으로 처리해야합니다.

이 방법이 도움이되지 않는다면, 애널리틱스가 필요합니다. 따라서 응용 프로그램과 라이브러리 모두에 대해 qmake .pro 파일을 게시하십시오.

편집 :

BTW "QtCreator은 절대 변하지 않을하기 위해 라이브러리를 기대한다"-이 약 상관하지 않는 (qmake에의 수준에서 처리됩니다 - Qt는 창조주가 모든 라이브러리에 대해 상관하지 않는다 내용 뿐이므로 .pro 파일에 쓰여진 내용 만 알 수 있습니다.), 그리고 이후 링커.

두 프로젝트에서 생성 된 사용자가 아닌 모든 사용자를 제거하는 것이 가장 쉽습니다. 소스 및 .pro 파일과 동등한 Code :: Block이 사용하는 모든 것이 유지하는 유일한 것입니다. 그런 다음 지금 작성한 것처럼 둘 다 컴파일하십시오. 여전히 작동하지 않는다면 QtCreator (또는 qmake 또는 링커) 문제는 아니지만 소스에 문제가 있음을 의미합니다.

그래도 작동하지 않으면 빌드 환경의 어딘가에 라이브러리의 일부 부실 버전이있는 것 같습니다. 그것은 당신이 리눅스와 ld 컴파일러 (오른쪽?)를 사용하는 것 같습니다. --trace 옵션을 사용하여 사용중인 라이브러리 버전을 확인하십시오. 그냥 추가하십시오

LIBS += -Xlinker --trace 

귀하의 .pro 파일에 컴파일러 출력을보십시오.

+0

라이브러리는 Code :: Blocks에서 개발 중이며, GUI 응용 프로그램 개발을 제외한 모든 것에 사용합니다. 둘 다 다시 작성한 및 QtCreator 그것이 빌드 된 라이브러리를 읽고 있으므로 _should_ 작동합니다. – Katherine1

+0

라이브러리에서 제거한 헤더 파일에 대해 불만을 표시 할 때까지 자체 수정을 결정할 때까지 종속 경로에서 라이브러리를 제거해야했습니다. 그러나 누락 된 클래스 문제는 좀 더 긴급한 문제이지만 그 문제를 해결할 수는 없습니다. – Katherine1

+0

제 편집보기 .... –

관련 문제