The following section in OsgQtQuick‘s CMakeLists.txt:
find_package(OpenSceneGraph 3.0 REQUIRED osg osgQt osgDB osgGA osgManipulator osgUtil osgViewer osgText)
results in CMake searching for FindOpenSceneGraph.cmake file:
strace cmake ../../osgqtquick/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/dmitry/examples/install |& grep -i OpenSceneGraph
access("/home/dmitry/examples/osgqtquick/cmake/FindOpenSceneGraph.cmake", R_OK) = -1 ENOENT (No such file or directory)
access("/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake", R_OK) = 0
access("/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake", R_OK) = 0
stat("/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake", {st_mode=S_IFREG|0644, st_size=7438, ...}) = 0
open("/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake", O_RDONLY) = 3
read(3, "# - Find OpenSceneGraph\n# This m"..., 8192) = 7438
read(3, "/* -*-c++-*- OpenSceneGraph - Co"..., 4096) = 3495
read(3, "/* -*-c++-*- OpenSceneGraph - Co"..., 8191) = 3495
Could NOT find OpenSceneGraph (missing: OPENSCENEGRAPH_LIBRARIES
OPENSCENEGRAPH_INCLUDE_DIR OSG_FOUND OSGQT_FOUND OSGDB_FOUND OSGGA_FOUND
/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake:187 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
access("/usr/share/cmake-2.8/Modules/FindOpenSceneGraph.cmake", R_OK) = 0
It cannot find OpenSceneGraph libraries because there is a strange code in Findosg_functions.cmake included from FindOpenSceneGraph.cmake:
function(OSG_FIND_LIBRARY module library)
string(TOUPPER ${module} module_uc)
find_library(${module_uc}_LIBRARY
NAMES ${library}
HINTS
ENV ${module_uc}_DIR
ENV OSG_DIR
ENV OSGDIR
ENV OSG_ROOT
${${module_uc}_DIR}
${OSG_DIR}
PATH_SUFFIXES lib
PATHS
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
/usr/freeware
)
find_library(${module_uc}_LIBRARY_DEBUG
NAMES ${library}d
HINTS
ENV ${module_uc}_DIR
ENV OSG_DIR
ENV OSGDIR
ENV OSG_ROOT
${${module_uc}_DIR}
${OSG_DIR}
PATH_SUFFIXES lib
PATHS
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
/usr/freeware
)
if(NOT ${module_uc}_LIBRARY_DEBUG)
# They don't have a debug library
set(${module_uc}_LIBRARY_DEBUG ${${module_uc}_LIBRARY} PARENT_SCOPE)
set(${module_uc}_LIBRARIES ${${module_uc}_LIBRARY} PARENT_SCOPE)
else()
# They really have a FOO_LIBRARY_DEBUG
set(${module_uc}_LIBRARIES
optimized ${${module_uc}_LIBRARY}
debug ${${module_uc}_LIBRARY_DEBUG}
PARENT_SCOPE
)
endif()
endfunction()
it assigns OSGDB_LIBRARIES, for example, a value like ‘optimizedOSGDB_LIBRARY_NOTFOUNDdebugPathToTheLibd“. I replaced all the code above with the following:
function(OSG_FIND_LIBRARY module library)
string(TOUPPER ${module} module_uc)
find_library(${module_uc}_LIBRARY
NAMES ${library} ${library}d
HINTS
ENV ${module_uc}_DIR
ENV OSG_DIR
ENV OSGDIR
ENV OSG_ROOT
${${module_uc}_DIR}
${OSG_DIR}
PATH_SUFFIXES lib64
PATHS
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
/usr/freeware
)
set(${module_uc}_LIBRARIES ${${module_uc}_LIBRARY} PARENT_SCOPE)
endfunction()
and did the same corrections in FindOpenThreads.cmake, note that I also replaced ‘lib’ with ‘lib64’. Probably there should be more complicated code that works differently for Debug and Release build types, but I need only Debug at the moment. And after that CMake succeeded:
cmake ../../osgqtquick/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/dmitry/examples/install -DOpenSceneGraph_DEBUG=1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmitry/examples/install/lib64:/home/dmitry/examples/install/lib
-- The CXX compiler identification is GNU 4.7.3 -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- [ FindOpenSceneGraph.cmake:85 ] Components = osg;osgQt;osgDB;osgGA;osgManipulator;osgUtil;osgViewer;osgText;OpenThreads -- [ FindOpenSceneGraph.cmake:100 ] Detected OSG_INCLUDE_DIR = /home/dmitry/examples/install/include -- [ FindOpenSceneGraph.cmake:143 ] Detected version 3.4.0 -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osg ) -- Found osg: /home/dmitry/examples/install/lib/libosgd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgQt ) -- Found osgQt: /home/dmitry/examples/install/lib/libosgQtd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgDB ) -- Found osgDB: /home/dmitry/examples/install/lib/libosgDBd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgGA ) -- Found osgGA: /home/dmitry/examples/install/lib/libosgGAd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgManipulator ) -- Found osgManipulator: /home/dmitry/examples/install/lib/libosgManipulatord.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgUtil ) -- Found osgUtil: /home/dmitry/examples/install/lib/libosgUtild.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgViewer ) -- Found osgViewer: /home/dmitry/examples/install/lib/libosgViewerd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(osgText ) -- Found osgText: /home/dmitry/examples/install/lib/libosgTextd.so -- [ FindOpenSceneGraph.cmake:157 ] Calling find_package(OpenThreads ) -- Found OpenThreads: /home/dmitry/examples/install/lib/libOpenThreadsd.so -- Found OpenSceneGraph: /home/dmitry/examples/install/lib/libosgd.so;/home/dmitry/examples/install/lib/libosgQtd.so;/home/dmitry/examples/install/lib/libosgDBd.so;/home/dmitry/examples/install/lib/libosgGAd.so;/home/dmitry/examples/install/lib/libosgManipulatord.so;/home/dmitry/examples/install/lib/libosgUtild.so;/home/dmitry/examples/install/lib/libosgViewerd.so;/home/dmitry/examples/install/lib/libosgTextd.so;/home/dmitry/examples/install/lib/libOpenThreadsd.so (found suitable version "3.4.0", minimum required is "3.0") -- ***OSGDB_LIBRARY: /home/dmitry/examples/install/lib/libosgDBd.so -- ***OSGDB_LIBRARY_DEBUG: -- ***OSGDB_LIBRARIES: /home/dmitry/examples/install/lib/libosgDBd.so -- ***OPENTHREADS_LIBRARIES: /home/dmitry/examples/install/lib/libOpenThreadsd.so -- Configuring done -- Generating done -- Build files have been written to: /home/dmitry/examples/build/osgqtquick
The lines starting with *** are the debug output that I added to OsgQtQuick‘s CMakeLists.txt:
# OpenSceneGraph
find_package(OpenSceneGraph 3.0 REQUIRED
osg
osgQt
osgDB
osgGA
osgManipulator
osgUtil
osgViewer
osgText)
MESSAGE( STATUS "***OSGDB_LIBRARY: " ${OSGDB_LIBRARY} )
MESSAGE( STATUS "***OSGDB_LIBRARY_DEBUG: " ${OSGDB_LIBRARY_DEBUG} )
MESSAGE( STATUS "***OSGDB_LIBRARIES: " ${OSGDB_LIBRARIES} )
MESSAGE( STATUS "***OPENTHREADS_LIBRARIES: " ${OPENTHREADS_LIBRARIES} )
Finally all OpenSceneGraph libraries were linked successfully:
ldd libosgQtQmld.so | grep -i osg
libosgd.so.130 => /home/dmitry/examples/install/lib64/libosgd.so.130 (0x00007fd77a10d000) libosgQtd.so.130 => /home/dmitry/examples/install/lib64/libosgQtd.so.130 (0x00007fd779ec6000) libosgDBd.so.130 => /home/dmitry/examples/install/lib64/libosgDBd.so.130 (0x00007fd77997c000) libosgGAd.so.130 => /home/dmitry/examples/install/lib64/libosgGAd.so.130 (0x00007fd779680000) libosgManipulatord.so.130 => /home/dmitry/examples/install/lib64/libosgManipulatord.so.130 (0x00007fd7793e3000) libosgTextd.so.130 => /home/dmitry/examples/install/lib64/libosgTextd.so.130 (0x00007fd77908d000) libosgViewerd.so.130 => /home/dmitry/examples/install/lib64/libosgViewerd.so.130 (0x00007fd778c72000) libosgUtild.so.130 => /home/dmitry/examples/install/lib64/libosgUtild.so.130 (0x00007fd775793000)
And I even was able to start my test QML application after adding ‘d’ suffix to all libraries in all qmldir files:
qml/osgGA/qmldir qml/osgManipulator/qmldir qml/osgViewer/qmldir qml/osgText/qmldir qml/osgDB/qmldir qml/osg/qmldir
For example, qml/osg/qmldir should look like
module osg plugin osgplugind
My QML application shows the rotating cube:

with the following QML:
import QtQuick 2.5
import QtQuick.Controls 1.4
// OpenSceneGraph
import osg 2.0 as OSG // Core types
import osgGA 2.0 as OSGGA // GUI Abstraction
import osgViewer 2.0 as OSGViewer // Viewer functionality
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("&Open")
onTriggered: console.log("Open action triggered");
}
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
// Root item - 3D scene view
OSGViewer.View {
// Default view size
width: 640; height: 480
// Set favorite camera manipulator
cameraManipulator: OSGGA.TrackballManipulator {}
// Set scene for rendering
sceneData: OSG.Geode {
OSG.ShapeDrawable {
color: Qt.rgba(1, 1, 0, 1)
shape: OSG.Box {
halfLengths: Qt.vector3d(0.5, 0.5, 0.5)
}
}
}
}
}
I also did some experimentation with CMAKE_MODULE_PATH variable that can be defined from CMake command line, but it does not help in this situation. Setting CMAKE_MODULE_PATH environment variable does not take an effect:
export CMAKE_MODULE_PATH=$CMAKE_MODULE_PATH:/home/dmitry/examples/OpenSceneGraph/CMakeModules echo $CMAKE_MODULE_PATH cmake ../../osgqtquick/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/dmitry/examples/install
To build OsgQtQuick with OsgEarth I used the following command (by default osgQtQuick_WITH_EARTH is OFF):
cmake ../../osgqtquick/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/dmitry/examples/install -DOpenSceneGraph_DEBUG=1 -DosgQtQuick_WITH_EARTH=ON
that started to work after adding ‘d’ suffix to library name in osgqtquick/cmake/FindOsgEarth.cmake:
MACRO( FIND_OSGEARTH_LIBRARY MYLIBRARY MYLIBRARYNAME )
FIND_LIBRARY(${MYLIBRARY}
NAMES
${MYLIBRARYNAME} ${MYLIBRARYNAME}d
PATHS
${OSGEARTH_DIR}
$ENV{OSGEARTH_BUILD_DIR}
$ENV{OSGEARTH_DIR}
$ENV{OSGEARTHDIR}
$ENV{OSG_ROOT}
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw
/opt/local
/opt/csw
/opt
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSGEARTH_ROOT]/lib
/usr/freeware
PATH_SUFFIXES
/lib/
/lib64/
/build/lib/
/build/lib64/
/Build/lib/
/Build/lib64/
)

