g ++ с DevIL: невозможно связать

Во-первых, я использую Fedora и изучаю OpenGL. Я бы хотел немного поработать с DevIL, поэтому я установил пакеты DevIL и DevIL-ILUT из официального репозитория. У меня есть тестовый код для загрузки и рендеринга файла, поэтому я решил протестировать его (я буду изучать некоторые основы DevIL на моем курсе, и нам дали этот файл, чтобы убедиться, что DevIL отлично работает для нас).

Файл содержит строку:

#include "IL/devil_cpp_wrapper.hpp"

поэтому я скопировал каталог IL (который у нас также есть) в каталог с тестовым файлом (каталог IL содержит много заголовочных файлов, например il.h, ilut.h, ilu.h, …). Тем не менее, сборка не удалась в

#include <IL/ilut.h>

из файла IL / devil_cpp_wrapper.hpp. Я не понимаю, так как я установил пакеты. Я пытался поместить каждый возможный параметр в g ++ (поскольку я не нашел для него никакого полезного руководства, может быть, я просто слепой), -lIL, -lILU, -lILUT, -ldevil, для каждой возможности это выдает мне ту же ошибку. Я не смог найти правильного решения, поэтому сдался и скопировал каталог IL также в / usr / include. На этот раз он дал мне эту ошибку для каждой библиотеки:

/usr/bin/ld: cannot find <param>

Поэтому я удалил каталог и попытался заменить все системные включения, такие как в devil_cpp_wrapper.hpp, на те, что в каталоге (так как файлы называются одинаковыми). У линкера возникла та же проблема, поэтому я удалил все параметры библиотеки и попытался скомпилировать ее снова, но на этот раз не удалось выполнить «неопределенную ссылку» для функций, специфичных для DevIL.

У нас есть также некоторые файлы для dll (DevIL.dll, ILU.dll, ILUT.dll) и .lib к ним, я пытался также связать их, но все равно получаю те же неопределенные ошибки ссылок. Кроме того, этот курс предназначен в основном для пользователей VS, поэтому я не уверен, какие файлы мне следует включать.

Я также попытался собрать DevIL из их исходного кода на github, как написано в их файле README.unix, но не получилось на первом шаге (autoreconf -i не удалось для некоторых libILUT.la; я также попробовал autoconf -i на случай, если они написали неправильно , это не удалось для неопределенного макроса win32).

Итак, мой вопрос: я нуб, который не может связать DevIL. Я перепробовал все, что мог придумать, но не нашел решения. Может кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ: Поскольку сборка из GitHub не удалось, я решил дать ему шанс и загрузить их .tar и попытался скомпилировать из него. Сначала он работал, но потом make вернул «неопределенную ссылку на` png_set_gray_1_2_4_to_8 ‘»и» collect2: error: ld возвратил 1 статус выхода «. Даже после этого я пытался завершить сборку с помощью make install, что, конечно, тоже не удалось, но в этой попытке я получил несколько библиотек в / usr / local / lib. Тем не менее, я все еще не могу скомпилировать свою тестовую программу, потому что упомянутая неопределенная ссылка на png_set_gray_1_2_4_to_8, на которую сейчас жалуется компоновщик.

0

Решение

Существует множество вариантов использования библиотек в Linux. Обычно это довольно легко, но вы, кажется, наткнулись на некоторые распространенные ошибки.

Правило № 1: не трогай /usr или же /usr/local сам.

/usr каталог для пакетов, установленных системой (например, apt-get на Debian, Ubuntu или Mint), так что вы должны почти никогда коснуться этого вообще.

/usr/local каталог для пакетов, которые вы установить (при условии, что вы являетесь администратором машины), но вы не копируете туда файлы вручную. Вместо этого вы запускаете установочные сценарии, которые автоматически помещают туда файлы.

Как правило, вы устанавливаете так:

./configure
make
sudo make install

Правило № 2: сначала используйте менеджер пакетов.

Диспетчер пакетов зависит от того, какой дистрибутив Linux вы используете. Например, в системах на основе Debian система пакетов является «apt», и вы можете использовать synaptic, aptitude или apt-get для установки пакетов.

В моей системе я бы запустил команду:

sudo apt-get install libdevil-dev

-dev означает «разработка», поэтому включает заголовки, необходимые для компиляции программ, использующих DevIL.

Правило № 3: Если вы компилируете из исходного кода, получите правильный релиз, прежде чем смотреть на GitHub.

Правильные релизы будут иметь configure скрипты. Поскольку вы загрузили с GitHub, вы должны были вызвать autoconf, что означает просто установку большего количества пакетов в вашей системе. Не беспокойтесь, просто возьмите правильную версию исходного кода.

Правило № 4: Всегда используйте систему сборки.

Вы не упомянули, как вы компилируете вещи, поэтому меня беспокоит, что вы можете просто печатать gcc в командной строке. Это рецепт разочарования.

Вот make-файл, который вы можете использовать для компиляции простой программы на C ++, использующей DevIL, при условии, что ваша программа все в main.cpp:

all: myprog
clean:
rm -f myprog *.o

devil_cflags := $(shell pkg-config --cflags IL)
devil_libs := $(shell pkg-config --libs IL)

CXXFLAGS := -O0 -g -Wall -Wextra $(devil_cflags)
LIBS := $(devil_libs)

myprog: main.o
c++ $(LDFLAGS) -o $@ $^ $(LIBS)

Это использует pkg-config выяснить, как связаться с DevIL. Это намного лучше, чем писать флаги компоновщика самостоятельно.

Обратите внимание, что отступ в Makefile должен быть сделано с вкладками, вы не можете использовать пробелы.

4

Другие решения

Чтобы добавить новую библиотеку, вы должны скопировать файлы внутри lib и включить каталоги в соответствующие места в папке usr. В противном случае компилятор не сможет найти, где находится ваша библиотека.

Я не уверен, что имя каталога, но оно должно быть помещено в эти папки:

для заголовков:
USR / местные / включить

для библиотек:
USR / местные / Библиотека

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector