Newish C++ 프로그래머가 여기 있습니다. QT4 응용 프로그램을 만들고 있는데 log4cplus를 사용하여 시작할 위치에 충분히 커졌습니다. 나는 가깝다고 생각하지만 qmake는 여전히 협력하고 있지 않습니다.QT4 응용 프로그램에 정적 외부 라이브러리 포함
Windows 컴퓨터에서 실행 중이며 cygwin ($ ./configure --enable-static
) 아래에 정적 라이브러리로 log4cplus를 컴파일했습니다.
첫 번째 질문
log4cplus를 컴파일 할 때 두 개의 파일이 있습니다.
liblog4cplus.dll.a
- 내가 그들 모두를 포함해야합니까? 파일
.dll.a
은 무엇이 있습니까?두 번째 질문
내가 MOC는 성공하지만 log4cplus 클래스 중 하나를 사용하려고 할 때 gcc가 실패 컴파일합니다. 헤더 파일을 찾을 수 없거나 실제 라이브러리를 찾을 수없는 경우 잘 모르겠습니다.g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\Qt\2010.05\qt\include\QtCore" -I"..\..\..\Qt\2010.05\qt\include\QtGui" -I"..\..\..\Qt\2010.05\qt\include" -I"external" -I"..\..\..\Qt\2010.05\qt\include\ActiveQt" -I"debug" -I"..\..\..\Qt\2010.05\qt\mkspecs\win32-g++" -o debug\qrc_tilex.o debug\qrc_tilex.cpp g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\tilex.exe object_script.tilex.Debug -L"c:\work\workspace\tilex\lib" -L"c:\Qt\2010.05\qt\lib" -lmingw32 -lqtmaind -Lliblog4cplus.a -lQtGuid4 -lQtCored4 ./debug\main.o: In function `Z5qMainiPPc': C:\work\workspace\tilex/main.cpp:37: undefined reference to `log4cplus::Logger::getDefaultHierarchy()' C:\work\workspace\tilex/main.cpp:37: undefined reference to `log4cplus::BasicConfigurator::BasicConfigurator(log4cplus::Hierarchy&)' C:\work\workspace\tilex/main.cpp:51: undefined reference to `log4cplus::BasicConfigurator::~BasicConfigurator()' C:\work\workspace\tilex/main.cpp:51: undefined reference to `log4cplus::BasicConfigurator::~BasicConfigurator()' mingw32-make[1]: Leaving directory `C:/work/workspace/tilex' collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\tilex.exe] Error 1 mingw32-make: *** [debug] Error 2
내 프로젝트는
C:\work\workspace\tilex
에 있습니다.내 디렉토리 구조는 이것이다 : 내 .PRO 파일의
tilex /lib /<*.a files> /external /log4cplus /<header files>
관련 부분. (컴파일하고 log4cplus없이 잘 실행)
INCLUDEPATH += C:\\work\\workspace\\tilex\\external QMAKE_LIBDIR += C:\\work\\workspace\\tilex\\lib LIBS += -Lliblog4cplus.a
내 주요 파일을 (나는 모든 이들 변수의 여러 순열을 시도하고 여전히 같은 결과를 얻을했습니다).
#include "Tilex.h" #include <QtGui> #include <QApplication> #include <log4cplus/logger.h> #include <log4cplus/configurator.h> using namespace log4cplus; int main(int argc, char *argv[]) { Q_INIT_RESOURCE(tilex); QApplication app(argc, argv); // Fails BasicConfigurator config; // config.configure(); // Logger::getInstance() // Logger logger = Logger::getInstance("main"); // LOG4CPLUS_WARN(logger, "Hello, World!"); // ! Tilex mainWin; mainWin.show(); return app.exec(); }
-llog4cplus가 작동했습니다. 정말 고마워요! 정적 링크와 동적 연결 포스트가 도움이되었습니다. C++ 세계에 처음이되어서 나는 그 차이점을 알지 못했습니다. – LeviX