Arhn - архитектура программирования

скомпилированная программа не может найти freeglut.dll

Я новичок на этом сайте и относительно новичок в программировании. Я некоторое время занимался программированием на C++, используя Visual Studio 2010, и я хотел заняться OpenGL, поэтому для начала я купил OpenGL Superbible. Я застрял на «простом» проекте второй главы. После нескольких часов исследований я смог загрузить все необходимые файлы для использования freeGLUT и GLtools. Я убедился, что все находится в нужном месте для работы программы. Теперь кажется, что все улажено... за исключением одной странной проблемы.

Мне сказали, что нужно поместить freeglut.dll в папку Windows\System32, что я и сделал. Сейчас проект будет построен, но когда я запущу его, он скажет мне

«Программа не может запуститься, так как на вашем компьютере отсутствует freeglut.dll. Попробуйте переустановить программу, чтобы решить эту проблему».

Теперь я уверен, что freeglut.dll находится в Windows\System32, как и должно быть, так в чем проблема? как мне это решить?

Вот исходный код из книги:

#include "../../shared/gltools.h"  //OpenGL toolkit

//////////////////////////////////////////////
//called to draw scene

void RenderScene(void)
{
    // clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

 //Flush drawing commands
    glFlush();
}
////////////////////////////////////////////////////////
//set up the rendering state
void SetupRC(void)
{
    glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
}
///////////////////////////////////////////////////////////
//main program entry point
void main(void)
int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();
    glutMainLoop();
    return 0;
    }

Это код, который на самом деле скомпилировался, но не запустился (это немного беспорядок из-за всех противоречивых данных, которые я получил из разных ресурсов):

 #include <stdio.h>
 #include <stdlib.h>
 #include <windows.h>
 #include <GLTools.h>
 #include <gl/GLUT.h>
 //called to draw scene

 void RenderScene(void)
 {
// clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT);

glFlush();
 }

 //set up the rendering state
 void SetupRC(void)
 {
glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
 }

 //void main(void)
 int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("Simple");
glutDisplayFunc(RenderScene);

SetupRC();
glutMainLoop();
return 0;
}

  • Вы пытались просто посмотреть, будет ли он работать вообще, поместив dll в ту же папку, что и exe? 30.05.2013

Ответы:


1

Попробуйте поместить DLL в ту же папку, что и ваш exe-файл. Совет поместить его в Windows\System32 предшествует многим новым ограничениям безопасности Windows.

29.05.2013

2

Ответ @ScottMcP-MVP решил мою проблему, но я подумал, что добавлю некоторые детали, которые на самом деле не подходят для комментария.

Мое решение:

  1. Добавьте в папку решения следующую структуру подкаталогов:

введите здесь описание изображения

В x86 поместите 32-битные версии GLut, GLew и все, что вам нужно.

В x64 поместите те же 64-битные версии.

Я пошел дальше и поместил все .dll, .lib и .h в соответствующие папки здесь, а не помещал их в Windows SDK (или, в Win7+, в папку «Windows Kits»), чтобы убедиться, что мои проекты в SVN имеют правильную версию, и проверка на другой машине извлечет все зависимости. Это потребовало добавления папок include и целевых папок lib в свойства проекта:

введите здесь описание изображения

Установите в поле Include Directories значение

$(SolutionDir)ThirdParty\Include\;$(IncludePath)

И ваше поле Library Directories для

$(SolutionDir)\ThirdParty\$(PlatformTarget)\lib\;$(LibraryPath)

Обратите внимание, что все это должно применяться к конфигурации сборки «Все платформы». Макрос $(PlatformTarget) обеспечит использование правильных lib и dll. Папка include не зависит от цели, поэтому я поместил ее в корень папки ThirdParty.

Чтобы получить необходимые файлы в выходную папку, добавьте следующее событие после сборки в конфигурацию вашего проекта (в разделе «Все платформы»):

xcopy $(SolutionDir)ThirdParty\$(PlatformTarget)\*.dll $(OutputPath) /Y

введите здесь описание изображения

Это скопирует правильную версию DLL в выходную папку при сборке. Это избавляет вас от необходимости вручную помещать библиотеки DLL в нашу выходную папку и более совместимо с системой управления версиями, где вы обычно не хотите включать выходные данные, папки корзины или папки отладки.

После того, как я все это настроил, я создал шаблон проекта VC OpenGL, так как настройка всего заняла 30 минут моей жизни, которые я бы предпочел вернуть.

28.09.2013
  • Вы не получили достаточно признания для этого ответа. Слава вам. 22.07.2016
  • Спасибо за решение. Потратил около 1 часа на поиск решения, затем нашел это, отлично работает в VS2017. 01.07.2017
  • @user1684343 ответы, подобные вашему, стоят того. Рад, что смог помочь. 01.07.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..