Error trying to compile QT app: any ideas?

Hi. I’m trying to compile the TagainiJisho app (is a japanese dictionary), but I get the following error:

cc1plus: Invalid option `-Wextra'
cc1plus: Invalid option `-Wno-unused-parameter'
make[2]: *** [src/sqlite/CMakeFiles/tagaini_sqlite.dir/Error.cc.o] Error 1
make[1]: *** [src/sqlite/CMakeFiles/tagaini_sqlite.dir/all] Error 2
make: *** [all] Error 2

I’m using a x86_gcc2 nightly. I do the follow steps before:

setarch x86
cmake 

This is the content of the CmakeLists.txt

# The project name decides the naming pattern of many things - choose it according # to the standard of the platform we run on. if(APPLE) project("Tagaini Jisho") else(APPLE) project("tagainijisho") endif(APPLE)

Set the program name to be the same as the project

set(tagaini_binary ${CMAKE_PROJECT_NAME})

set(VERSION 1.0.3)

cmake_minimum_required(VERSION 2.8.0)

find_package(Qt4 4.5 REQUIRED)

FIXME only required when CMake downloads dictionary files. Not necessary for building from source package.

find_program(GUNZIP NAMES gunzip REQUIRED)

Global GCC options

if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -Wall -Wextra -Wnon-virtual-dtor -Wno-unused-parameter -fno-exceptions -fno-rtti”)
endif(CMAKE_COMPILER_IS_GNUCC)

Add the default database lookup data path for Linux if not defined

if(UNIX AND NOT APPLE AND NOT DATA_DIR)
set(DATA_DIR “${CMAKE_INSTALL_PREFIX}/share/tagainijisho”)
endif(UNIX AND NOT APPLE AND NOT DATA_DIR)

64 bits Intel binary with 10.6 compatibility

if(APPLE)
set(CMAKE_OSX_ARCHITECTURES “${ARCHS_STANDARD_64_BIT}”)
set(CMAKE_OSX_SYSROOT “/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk”)
set(CMAKE_OSX_DEPLOYMENT_TARGET “10.6”)
set(CMAKE_PREFIX_PATH “${CMAKE_OSX_SYSROOT}/usr”)
set(CMAKE_FRAMEWORK_PATH “${CMAKE_OSX_SYSROOT}/Library/Frameworks:${CMAKE_OSX_SYSROOT}/System/”)
set(CMAKE_MODULE_PATH “${CMAKE_CURRENT_SOURCE_DIR}/pack/MacOS/”)
endif(APPLE)
if(WIN32)
set(extra_link_flags “-static-libgcc -static-libstdc++ -mwindows”)
endif(WIN32)

By default, enable all languages

if(NOT DICT_LANG)
set(DICT_LANG “fr;de;es;ru;it;pt;th;tr”)
endif()

Set DICT_LANG to always appear in the cache

set(DICT_LANG ${DICT_LANG} CACHE STRING “Languages to use for the dictionary data (semicolon-separated 2-letter codes)”)

Debug options

option(DEBUG_ENTRIES_CACHE “Debug entries cache behavior” OFF)
option(DEBUG_PATHS “Debug files lookup” OFF)
option(DEBUG_DETAILED_VIEW “Debug detailed view output” OFF)
option(DEBUG_QUERIES “Debug SQL queries” OFF)
option(DEBUG_TRANSACTIONS “Debug database transactions” OFF)
option(DEBUG_LISTS “Debug lists (very slow)” OFF)

Build tests suite?

option(BUILD_TESTS “Build tests suite” OFF)

Databases helper targets

add_custom_target(databases ALL)

i18n

add_subdirectory(i18n)

Source code

add_subdirectory(src)

Docs

add_subdirectory(doc)

Packaging stuff

add_subdirectory(pack)

External resources fetching and generation

if(NOT EXISTS ${CMAKE_SOURCE_DIR}/3rdparty/)
FILE(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/3rdparty/)
endif()

Uninstall

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" “${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake” IMMEDIATE @ONLY)
add_custom_target(uninstall “${CMAKE_COMMAND}” -P “${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake”)

Anyone could help me? Thanks in advance!!!

It looks like you are still using the gcc2 compiler. In order to make the compiler selection permanent with cmake you can do this:

  • Remove all generated files (make clean). cmake does not like changin compilers after having configured the project once.
  • PKG_CONFIG_LIBDIR=/boot/system/develop/lib/x86/pkgconfig CC=gcc-x86 CXX=g++-x86 cmake
  • make
This makes sure cmake will use the correct version of gcc, and also uses the right pkg-config files for finding libraries.

Thanks PulkoMandy!

However, I have a dumb question:
The sentence: PKG_CONFIG_LIBDIR=/boot/system/develop/lib/x86/pkgconfig CC=gcc-x86 CXX=g+±x86 cmake where must be set? (I tried it in the Terminal, but doesn’t work).

Sorry for my “newbie” question :slight_smile:

Yes, this should be done in terminal. What it does is set some environment variables and run cmake. You must put everything in Terminal on a single line. To do it in multiple lines you will need to “export” the variables.

Thanks again, PulkoMandy.

I finally get the PKG_CONFIG_LIBDIR to work.
The app started to compile, however, it stopped with the following error:

Linking CXX executable build_jmdict_db
/boot/system/develop/tools/x86/bin/../lib/gcc/i586-pc-haiku/4.8.4/../../../../i586-pc-haiku/bin/ld: cannot find -lpthread
/boot/system/develop/tools/x86/bin/../lib/gcc/i586-pc-haiku/4.8.4/../../../../i586-pc-haiku/bin/ld: cannot find -ldl
collect2: error: ld returned 1 exit status
make[2]: *** [src/core/jmdict/build_jmdict_db] Error 1
make[1]: *** [src/core/jmdict/CMakeFiles/build_jmdict_db.dir/all] Error 2
make: *** [all] Error 2

I found some old posts about Haiku lacking that library. Is this still true?

Thank you again !!!

It is not exactly lacking. It’s just thqt we put the code in different places. Where most UNIX systems available split their standard library in several pieces (libc, libm, libpthread, libdl), BeOS engineers decided to have everything in a single library (libroot.so).

Your CMakeLists.txt is apparently not checking for this. To search for pthreads you could use find_package(threads REQUIRED), and then target_link_libraries (myapp ${CMAKE_THREAD_LIBS_INIT}) instead of the target_link_libraries (myapp pthread) you probably have currently.

For libdl you can use the preset variable http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_DL_LIBS.html. So just replace target_lik_libraries(... -ldl) with target_link_libraries(... $(CMAKE_DL_LIBS)).

Thanks again, Pulkomandy. I will try to modify the CmakeLists.txt with that changes.