在cygwin中编译OpenEXR

And*_*dré 3 cygwin compiler-errors cross-compiling openexr

我正在尝试使用cygwin编译OpenEXR,但我遇到了麻烦.

到目前为止我做了什么:

cd ilmbase-X.X.X
./configure
make
make install
make check
Run Code Online (Sandbox Code Playgroud)

我需要这个,因为它的OpenEXR需要它.它运行正常,并且创建在/ usr /本地三个文件夹:bin,include\OpenEXRlib.

然后我继续OpenEXR,这就是我做的事情:

cd openexr-X.X.X
./configure
Run Code Online (Sandbox Code Playgroud)

一切运行正常但是当我这样做make时给我以下错误:

b44ExpLogTable.cpp:52:18: half.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

虽然我不知道为什么会发生这种情况但我可以通过这样做来解决这个问题:

./configure CPPFLAGS=-I/usr/local/include/OpenEXR
Run Code Online (Sandbox Code Playgroud)

但是,当我点击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
Run Code Online (Sandbox Code Playgroud)

这会发生在任何人身上吗?我已经google了很多,我找不到解决方案.我希望有人能帮帮忙.

Kai*_*iya 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