Название: Проблема при компиляции через CMake под ARM Отправлено: tohisu от Январь 27, 2010, 12:37 Добрый день!
Решил использовать CMake для сборки проекта. Точнее решил не совсем я. Просто часть проекта уже создана на CMake и пришлось перенести все остальное сюда же. При компиляции под десктоп ни каких проблем нет. Все собирается и работает. Проблемы начинаются когда я пытаюсь собрать под ARM: Код: Scanning dependencies of target mshell Кусочек из qatomic_arm.h, на который ругается: Код: inline char q_atomic_swp(volatile char *ptr, char newval) Самое интересное, что если собирать тот же самый проект без cmake, используя qmake && make, то все отлично компилируется и запускается на девайсе. Перерыл весь инет уже :((( Название: Re: Проблема при компиляции через CMake под ARM Отправлено: Rcus от Январь 27, 2010, 13:00 а как cmake вызываете перед сборкой? А то кажется что вызвали системный g++ вместо кросскомпилятора.
Название: Re: Проблема при компиляции через CMake под ARM Отправлено: tohisu от Январь 27, 2010, 13:13 а как cmake вызываете перед сборкой? А то кажется что вызвали системный g++ вместо кросскомпилятора. В общем делаю так: 1) chroot_юсь в систему (не знаю как это назвать правильнее :)) 2) Запускаю скрипт: Цитировать #!/bin/sh PATH=$PATH:/usr/local/Trolltech/Qt-4.6.0/bin export $PATH rm -rf build mkdir -p build cd build cmake -D PLATFORM=QTARM .. make А как указать каким компилятором компилировать? QMake похоже сам выбирал компилятор, которым собирались либы, а CMake о нем не знает получается? Название: Re: Проблема при компиляции через CMake под ARM Отправлено: Rcus от Январь 27, 2010, 13:21 Я делал в точности как описано по первой ссылке в google: 'cmake cross compile arm'.
Название: Re: Проблема при компиляции через CMake под ARM Отправлено: tohisu от Январь 27, 2010, 14:14 Я делал в точности как описано по первой ссылке в google: 'cmake cross compile arm'. Спасибо :) Я тоже ее нашел :) В общем добавил в раздел для ARM: Цитировать ... elseif(${PLATFORM} STREQUAL QTARM) message("Will make for ARM") set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_CXX_COMPILER arm-linux-g++) set(CMAKE_C_COMPILER arm-linux-gcc) add_subdirectory(mshell) ... Все скомпилилось нормально, но при линковке чет не понятно... Цитировать Linking CXX executable mshell /usr/lib/gcc/arm-ip-linux-gnueabi/4.3.2/../../../../arm-ip-linux-gnueabi/bin/ld: warning: libQtNetwork.so.4, needed by /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so, not found (try using -rpath or -rpath-link) /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::nextPendingConnection()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::readData(char*, long long)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::canReadLine() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::setSocketDescriptor(int)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::hasPendingConnections() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::bytesAvailable() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::state() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpSocket::qt_metacast(char const*)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::flush()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpSocket::QTcpSocket(QObject*)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::isSequential() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `typeinfo for QTcpServer' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpSocket::qt_metacall(QMetaObject::Call, int, void**)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::bytesToWrite() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::socketDescriptor() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpSocket::~QTcpSocket()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::error(QAbstractSocket::SocketError)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::writeData(char const*, long long)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::readLineData(char*, long long)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::waitForBytesWritten(int)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::errorString() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::atEnd() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::setSocketDescriptor(int, QAbstractSocket::SocketState, QFlags<QIODevice::OpenModeFlag>)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::close()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::incomingConnection(int)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::isListening() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::qt_metacall(QMetaObject::Call, int, void**)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::waitForReadyRead(int)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::qt_metacast(char const*)' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `typeinfo for QTcpSocket' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::~QTcpServer()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::connected()' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpSocket::staticMetaObject' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::staticMetaObject' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QAbstractSocket::socketDescriptor() const' /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so: undefined reference to `QTcpServer::QTcpServer(QObject*)' collect2: ld returned 1 exit status make[2]: *** [mshell/mshell] Error 1 make[1]: *** [mshell/CMakeFiles/mshell.dir/all] Error 2 make: *** [all] Error 2 В QT_LIBRARIES толко вот что: /usr/local/Trolltech/Qt-4.6.0/lib/libQtGui.so;/usr/local/Trolltech/Qt-4.6.0/lib/libQtCore.so Название: Re: Проблема при компиляции через CMake под ARM Отправлено: tohisu от Январь 27, 2010, 14:25 Это конечно не совсем правильно, но пока вот так удалось выкрутится:
set(QT_LIBRARIES "${QT_LIBRARIES};/usr/local/Trolltech/Qt-4.6.0/lib/libQtNetwork.so.4") Хотелось бы по правильнее конечно... Название: Re: Проблема при компиляции через CMake под ARM Отправлено: Rcus от Январь 27, 2010, 14:30 А если написать find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork REQUIRED)? Я давно не пересобирал Qt и таких проблем не помню
Название: Re: Проблема при компиляции через CMake под ARM Отправлено: tohisu от Январь 27, 2010, 17:56 А если написать find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork REQUIRED)? Я давно не пересобирал Qt и таких проблем не помню Неа, не помогло. Ну да и фиг с ним :) сделал так: Код: if(${PLATFORM} STREQUAL QTARM) Спасибо за помощь! :) |