我正在尝试使用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了很多,我找不到解决方案。我希望有人可以提供帮助。
答案 0 :(得分:6)
我知道这有点旧,但它帮助我找出-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