Ошибка связи OpenGL для функции загрузки GLFW DDS - PullRequest
0 голосов
/ 25 января 2020

Я пробираюсь через серию учебников OpenGL-tutorial.org. Все работало нормально, однако я не смог заставить Tutorial 5 работать в моем исполняемом файле детской площадки, хотя он работает при запуске из примера исполняемого файла Tutorial 5. Это верно, даже когда я копирую и вставляю пример кода поверх.

Я получаю следующие ошибки:

Undefined symbols for architecture x86_64:



"loadDDS(char const*)", referenced from:

_main in playground.o

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ниже приведен журнал ссылок:

Ld playground/playground normal x86_64
cd /Users/RufusVijayaratnam/rufus/Coding/ogl-master
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -target x86_64-apple-macos10.15 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -L/Users/RufusVijayaratnam/rufus/Coding/ogl-master/playground -F/Users/RufusVijayaratnam/rufus/Coding/ogl-master/playground -filelist /Users/RufusVijayaratnam/rufus/Coding/OpenGL/Tutorials.build/Debug/playground.build/Objects-normal/x86_64/playground.LinkFileList -Xlinker -object_path_lto -Xlinker /Users/RufusVijayaratnam/rufus/Coding/OpenGL/Tutorials.build/Debug/playground.build/Objects-normal/x86_64/playground_lto.o -Xlinker -no_deduplicate -Wl,-search_paths_first -Wl,-headerpad_max_install_names -framework OpenGL -framework OpenGL /Users/RufusVijayaratnam/rufus/Coding/OpenGL/external/glfw-3.1.2/src/Debug/libglfw3.a /Users/RufusVijayaratnam/rufus/Coding/OpenGL/external/Debug/libGLEW_1130.a -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework CoreVideo -Xlinker -dependency_info -Xlinker /Users/RufusVijayaratnam/rufus/Coding/OpenGL/Tutorials.build/Debug/playground.build/Objects-normal/x86_64/playground_dependency_info.dat -o /Users/RufusVijayaratnam/rufus/Coding/ogl-master/playground/playground

Таким образом, возникает ошибка, когда функция loadDDS() называется что не найдено. Я не уверен, почему это так. Функция объявлена ​​в texture.ccp, которая находится в папке (называемой 'common'), вместе с texture.hpp. texture.hpp имеет код ниже:

#ifndef TEXTURE_HPP
#define TEXTURE_HPP
// Load a .DDS file using GLFW's own loader
GLuint loadDDS(const char * imagepath);

#endif

В playground.cpp есть:

include<texture.hpp>

Почему нельзя найти loadDDS(), даже хотя я установил рабочий каталог функции игровой площадки таким же, как и для учебника 5, а код в playground.ccp и 'tutorial05.ccp' точно такой же?

1 Ответ

1 голос
/ 25 января 2020

для исполняемого файла детской площадки (не работает)

# User playground add_executable(playground 
    playground/playground.cpp
    common/shader.cpp
    common/shader.hpp )

и, наконец, для урока 5 (работает)

# Tutorial 5
add_executable(tutorial05_textured_cube
    tutorial05_textured_cube/tutorial05.cpp
    common/shader.cpp
    common/shader.hpp
    common/texture.cpp
    common/texture.hpp

Итак, я сделав обоснованное предположение, что loadDDS() реализован в texture.cpp, и поскольку вы не добавили этот файл, он не будет скомпилирован, а полученный объектный файл не будет связан, а символ просто не будет найден .

...