首先,我正在使用Fedora和学习OpenGL。我想使用一下DevIL,所以我从官方存储库中安装了DevIL和DevIL软件包。我有一个加载和呈现文件的测试代码,所以我决定对它进行测试(我将在我的课程中学习一些DevIL基础知识,并向我们提供该文件以确保DevIL对我们正常工作)。
该文件包含行:
#include "IL/devil_cpp_wrapper.hpp"因此,我用测试文件将IL目录(我们也可用)复制到目录中(IL目录包含大量头文件,例如il.h、ilut.h、ilu.h、.)。但是,构建失败了。
#include <IL/ilut.h>来自IL/cpp_cpp_Wrapper.hpp文件。我不明白,因为我安装了软件包。我试着将所有可能的参数都放入g++ (因为我没有找到任何有用的手册,也许我只是瞎了眼)、-lIL、-lILU、-lILUT、-ldevil,因为每一种可能都会给我带来同样的错误。我无法找到任何合适的解决方案,所以我放弃并将IL目录复制到/usr/include。这一次,它给了我这个错误,每个库包括:
/usr/bin/ld: cannot find <param>因此,我删除了目录,并尝试将所有系统包含(如devil_cpp_wrapper.hpp中的)替换为目录中的系统包含(因为文件被称为相同的文件)。链接器也有同样的问题,所以我删除了所有的库参数,并再次编译它,这一次在针对特定于魔鬼的函数的“未定义引用”上失败。
我们还为dll (DevIL.dll、ILU.dll、ILUT.dll)和.lib提供了一些文件,我也试图链接它们,但仍然得到相同的未定义引用错误。另外,本课程主要针对VS用户,所以我不确定我应该包括哪些文件。
我还尝试从他们的github源代码构建DevIL,就像在他们的README.unix文件中那样,但是在第一步就失败了( autoconf -i对于某些libILUT.la失败了;我也尝试了autoconf -i,以防他们写错了,它对于未定义的win32宏失败)。
所以,我的问题是:我是一个不能链接DevIL的菜鸟。我试过了我能想到的一切,但都找不到解决办法。有谁可以帮我?
编辑:由于github的构建失败,我决定给它一个机会,下载他们的.tar,并尝试从它编译。它一开始似乎在工作,但随后返回“对`png_set_gray_1_2_4_to_8的未定义引用”和"collect2: error: ld返回了1个退出状态“。即使在此之后,我也尝试使用make完成构建,当然这也失败了,但在这次尝试中,我在/usr/local/lib中引入了一些库。但是,我仍然不能编译我的测试程序,因为前面提到的对png_set_gray_1_2_4_to_8的未定义引用,链接器现在抱怨它。
发布于 2015-03-28 01:51:50
在Linux上使用库有很多选择。这通常是相当容易的,但你似乎偶然发现了一些常见的问题。
规则1:自己不要碰/usr或/usr/local。
/usr目录用于系统安装的包(例如Debian、Ubuntu或Mint上的apt-get ),因此您几乎不应该碰它。
/usr/local目录用于您安装的包(假设您是计算机的管理员),但是您不手动地在那里复制文件。相反,您可以运行自动将文件放在那里的安装脚本。
通常,您的安装方式如下:
./configure
make
sudo make install规则2:首先使用包管理器。
包管理器取决于您使用的Linux发行版。例如,在基于Debian的系统上,包系统是"apt",您可以使用突触、智能或apt获取来安装软件包。
在我的系统中,我会运行以下命令:
sudo apt-get install libdevil-dev-dev的意思是“开发”,因此它包含了编译使用DevIL的程序所需的头。
规则3:如果您从源代码编译,在查看GitHub之前获得一个适当的版本。
适当的版本将有configure脚本。因为您是从GitHub下载的,所以您必须调用autoconf,这意味着在您的系统上安装更多的包。不用费心,只要拿一个合适的源代码发布即可。
规则4:始终使用构建系统。
您没有提到如何编译东西,所以我担心您可能只是在命令行上输入gcc。这是一种让人沮丧的方法。
下面是一个makefile,您可以使用它来编译一个简单的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中的缩进必须用制表符来完成,不能使用空格。
发布于 2015-03-28 00:29:53
为了添加一个新的库,您应该在lib中复制文件,并将目录包含到usr文件夹中的适当位置。否则编译器将无法找到库所在的位置。
我不确定目录名,但它应该放在这些文件夹中:
对于标题: usr/local/include
对于libs : usr/local/lib
https://stackoverflow.com/questions/29311547
复制相似问题