我正在尝试使用cygwin编译OpenEXR,但是这样做很麻烦。
到目前为止,我所做的是:
cd ilmbase-X.X.X
./configure
make
make install
make check
我需要它,因为它是OpenEXR所需要的。它运行正常,并在/usr/local中创建三个文件夹:
bin
,include\OpenEXR
和lib
。然后我继续进行OpenEXR,这是我的工作:
cd openexr-X.X.X
./configure
一切正常,但是当我执行
make
时,出现以下错误:b44ExpLogTable.cpp:52:18: half.h: No such file or directory
尽管我不知道为什么会这样,但我可以通过以下方法解决:
./configure CPPFLAGS=-I/usr/local/include/OpenEXR
但是,当我按下
make
时,抛出了另一个错误,我被卡在这里:/usr/local/include/OpenEXR/half.h:511: undefined reference to `half::_toFloat'
/usr/local/include/OpenEXR/half.h:511: undefined reference to `half::_toFloat'
/usr/local/include/OpenEXR/half.h:481: undefined reference to `half::_eLut'
/usr/local/include/OpenEXR/half.h:511: undefined reference to `half::_toFloat'
/usr/local/include/OpenEXR/half.h:511: undefined reference to `half::_toFloat'
/usr/local/include/OpenEXR/half.h:481: undefined reference to `half::_eLut'
/usr/local/include/OpenEXR/half.h:499: undefined reference to `half::convert(int)'
/usr/local/include/OpenEXR/half.h:481: undefined reference to `half::_eLut'
/usr/local/include/OpenEXR/half.h:499: undefined reference to `half::convert(int)'
/usr/local/include/OpenEXR/half.h:499: undefined reference to `half::convert(int)'
collect2: ld returned 1 exit status
<builtin>: recipe for target `b44ExpLogTable' failed
make[1]: *** [b44ExpLogTable] Error 1
make[1]: Leaving directory `/home/Andre/openexr-1.6.1/IlmImf'
Makefile:313: recipe for target `all-recursive' failed
make: *** [all-recursive] Error 1
这会发生在任何人身上吗?我已经在Google上搜索了很多,但找不到解决方案。我希望有人能帮帮忙。
最佳答案
我知道这有点老了,但是它帮助我找出了-I
开关。
知道了之后,我便找到了解决您问题的答案。您提供的是包含文件,而不是库本身,因此是undefined reference
。采用:./configure CPPFLAGS="-I/usr/local/include/OpenEXR -L/usr/local/bin -lHalf-6"
-L
提供了一个库搜索目录,而-l
提供了一个链接到程序的库。 -lHalf-6
表示文件/usr/local/bin/cygHalf-6.dll
。
我不能告诉你为什么图书馆在那儿,但是它在那儿。
您可能还会遇到memset的另一个问题,此问题已在此处解决:http://lists.gnu.org/archive/html/openexr-user/2011-07/msg00002.html