Linux Mint 18.1에서 Linux와 호환된다고 주장하는 애플리케이션을 컴파일하는 데 문제가 있습니다. 응용 프로그램은 Lightscreen이라고 합니다. 명령을 사용하는 것을 제외하고는 모든 것이 원활하게 진행됩니다 make
.
지금까지 수행한 명령 프로세스는 다음과 같습니다.
이전 버전의 라이트스크린을 사용하지 않으면 다음과 같은 결과가 나와 다른 버전에서는 작동하지 않기 때문에 먼저 QT 5.7을 설치해야 했습니다.
Project ERROR: Unknown module(s) in QT: x11extras
그래서 최근 업데이트에서 지원되는 것으로 추정되는 QT 5.7을 설치했는데 결과는 다음과 같습니다.
nicholas@LinuxNick ~/bin/lightscreen $ /home/nicholas/.Qt/5.7/gcc_64/bin/qmake
Project MESSAGE: This project is using private headers and will therefore be tied to this specific Qt module build version.
Project MESSAGE: Running this project against other versions of the Qt modules may crash at any arbitrary point.
Project MESSAGE: This is not a bug, but a result of using Qt internals. You have been warned!
nicholas@LinuxNick ~/bin/lightscreen $
오류 메시지는 없고 일반적인 프로젝트 메시지만 있어서 모든 것이 괜찮을 거라고 생각하고 계속했습니다. make를 실행했는데 첫 번째 오류가 발생했습니다.
In file included from tools/screenshot.cpp:45:0:
tools/screenshot.cpp: In member function ‘void Screenshot::save()’:
tools/screenshot.cpp:250:34: error: expected unqualified-id before numeric constant
result = Screenshot::Success;
^
tools/screenshot.cpp:260:79: error: expected unqualified-id before numeric constant
result = (QFile::rename(mUnloadFilename, fileName)) ? Screenshot::Success : S
^
tools/screenshot.cpp:260:79: error: expected ‘:’ before numeric constant
tools/screenshot.cpp:262:34: error: expected unqualified-id before numeric constant
result = Screenshot::Success;
^
Makefile:5959: recipe for target 'screenshot.o' failed
make: *** [screenshot.o] Error 1
내가 뭐 잘못 했어요? 저는 Linux에서 컴파일하는 것이 처음이고 많은 프로그램을 컴파일했지만 여전히 작업 방법과 컴파일 방법을 파악하지 못했습니다. 단계별 가이드는 도움이 될 수 있지만 반드시 그럴 필요는 없습니다. 특히 필요하지 않은 경우에는 더욱 그렇습니다.
미리 도와주시고 감사드립니다.
편집: 지금 다른 문제가 발생했습니다. 이것을 실행하면 make
다음과 같은 결과가 출력됩니다.
g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DUGLOBALHOTKEY_NOEXPORT -DAPP_VERSION=\"2.5\" -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_X11EXTRAS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CONCURRENT_LIB -DQT_CORE_LIB -I. -Itools/UGlobalHotkey -Itools/UGlobalHotkey -I../../.Qt/5.7/gcc_64/include -I../../.Qt/5.7/gcc_64/include/QtWidgets -I../../.Qt/5.7/gcc_64/include/QtMultimedia -I../../.Qt/5.7/gcc_64/include/QtGui/5.7.1 -I../../.Qt/5.7/gcc_64/include/QtGui/5.7.1/QtGui -I../../.Qt/5.7/gcc_64/include/QtX11Extras -I../../.Qt/5.7/gcc_64/include/QtGui -I../../.Qt/5.7/gcc_64/include/QtNetwork -I../../.Qt/5.7/gcc_64/include/QtSql -I../../.Qt/5.7/gcc_64/include/QtConcurrent -I../../.Qt/5.7/gcc_64/include/QtCore/5.7.1 -I../../.Qt/5.7/gcc_64/include/QtCore/5.7.1/QtCore -I../../.Qt/5.7/gcc_64/include/QtCore -I. -I. -I../../.Qt/5.7/gcc_64/mkspecs/linux-g++ -o os.o tools/os.cpp
tools/os.cpp: In function ‘QPair<QPixmap, QPoint> os::cursor()’:
tools/os.cpp:131:23: error: could not convert ‘QPoint(0, 0)’ from ‘QPoint’ to ‘QPair<QPixmap, QPoint>’
return QPoint(0, 0);
^
Makefile:5657: recipe for target 'os.o' failed
make: *** [os.o] Error 1
답변1
문제는 <X11/X.h>
(Linux로 컴파일할 때만 포함됨)에서 발생합니다. 이는 다음 매크로를 정의합니다.
#define Success 0
이는 동일한 이름의 열거형 멤버를 방해합니다 Screenshot::Result::Success
.
이 문제를 해결하려면 tools/screenshot.cpp를 열고 다음 줄을 찾으세요.
#ifdef Q_OS_LINUX
#include <QX11Info>
#include <X11/X.h>
#include <X11/Xlib.h>
#endif
Xh를 포함시킨 후 #undef Success
.