Я использую Ubuntu 20.04.1 LTS, и в настоящее время я работаю над учебным пособием по OpenSceneGraph 3.0 от Rui Wang и Xuelei Qian, и я на странице 87 пытаюсь создать Teapot, для которого требуются библиотеки перенасыщения и включаются. После некоторых исследований я скачал freeglut 3.2.1 и создал его в своем собственном каталоге. Излишне говорить, что я новичок в Ubuntu и не совсем понимаю, куда что-то идет после команды cmake make
, не говоря уже о том, куда что-то идет после команды cmake install
.
При попытке сборки возникает следующая ошибка:
/usr/bin/ld: CMakeFiles/MyProject.dir/main.cpp.o: in function `TeapotDrawable::drawImplementation(osg::RenderInfo&) const':
main.cpp:(.text+0x129): undefined reference to `glutSolidTeapot'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/MyProject.dir/build.make:91: MyProject] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/MyProject.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
До сих пор я использовал следующий файл CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
PROJECT(MyProject)
#find_package( GL )
find_package( OpenGL )
#find_package( freeglut REQUIRED ) // added REQUIRED
find_package( OpenThreads )
find_package( osg )
find_package( osgDB )
find_package( osgUtil )
find_package( osgViewer )
macro ( config_project PROJNAME LIBNAME )
include_directories( ${${LIBNAME}_INCLUDE_DIR} )
target_link_libraries( ${PROJNAME} ${${LIBNAME}_LIBRARY} )
endmacro()
add_executable( MyProject main.cpp )
config_project( MyProject OPENTHREADS )
config_project( MyProject OSG )
config_project( MyProject OSGDB )
config_project( MyProject OSGUTIL )
config_project( MyProject OSGVIEWER )
#config_project( MyProject FREEGLUT )
config_project( MyProject GLUT )
config_project( MyProject OPENGL )
Незакомментированные строки - это то, что я пытаюсь заставить это работать. Это работало для других примеров, использованных в книге до сих пор. Freeglut, OSG и OpenGL устанавливаются в каталоге usr/local/include
Если какая-либо информация отсутствует, я, конечно, отредактирую этот вопрос соответствующим образом. Спасибо.
Изменить: после добавления ключевого слова REQUIRED я получаю следующую ошибку от CMake:
CMake Error at CMakeLists.txt:7 (find_package):
By not providing "Findfreeglut.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "freeglut",
but CMake did not find one.
Could not find a package configuration file provided by "freeglut" with any
of the following names:
freeglutConfig.cmake
freeglut-config.cmake
Add the installation prefix of "freeglut" to CMAKE_PREFIX_PATH or set
"freeglut_DIR" to a directory containing one of the above files. If
"freeglut" provides a separate development package or SDK, be sure it has
been installed.
find_package( freeglut )
? - person Tsyvarev   schedule 23.11.2020freeglut
), которые вы ищете с помощьюfind_package()
, фактически найдены? Вы можете добавить ключевое словоREQUIRED
, поэтому CMake автоматически завершит работу, если пакет не будет найден. Также обратите внимание, что обычными переменными, установленнымиfind_package
, являются_INCLUDE_DIRS
и_LIBRARIES
. См., например. документация для скрипта FindGLUT.cmake. (Этот скрипт можно использовать черезfind_package(GLUT)
.) - person Tsyvarev   schedule 23.11.2020glutInit
перед использованием функций GLUT. Возможно, есть какая-то другая функция, которая, в свою очередь, вызываетglutInit
. Но я не эксперт в GL, поэтому не могу предложить ничего, кроме как прочитать какой-нибудь туториал. - person Tsyvarev   schedule 23.11.2020