之前在我的iBook G4上编译G3D,一直没有编译成功,后来发现是ffmpeg库编译不了,对 buildg3d python脚本,去除ffmpeg后,例子程序链接时又对ffmpeg有依赖,本想换其它渲染库,尝试编译成功 OpenSceneGraph,感觉其代码组织得也很好,但是在Mac OS上运行时初始化窗口出错,又失望一回.最近在编译 VTK,在windows下可以编译成功,看起来功能也很丰富.
今天,下班回来偶尔上网查了一下,发现有个小伙跟我是同样的错误http://lists.mplayerhq.hu/pipermail/ffmpeg-user/2008-December/018060.html,赶紧在自己的机器上试了一下,现在在编译过程中,没有以前的那个错误了.如果编译得了的话,还是用回G3D吧,毕竟比较小巧,而且在G3D 6.x的版本中已经有人contribute了Qt做的GWindow,这样结合Qt一起用应该会方便很多了. 但是不知为什么 G3D 7.01不包含QGWindow了,没关系,自己参照一下,把它补完整应该也可以.
现在的设想是,利用Qt,G3D,CGAL做成digital geometry processing的实验平台.用CMAKE进行跨平台编译的管理.
2009-09-21
编译了一个新的3.8.1的make之后,则可以成功编译ffmpeg,也就可以编译G3D了,需要 注意的是 G3D 默认的 buildg3d脚本中,每次重新编 译的时候会把旧的target 清除掉,这样的话,会浪费很多编译的时间,可以把那一部分注释掉.
图:gfxmexer检测结果
后面在编译例子的时候,不想使用其提供的iCompile, 其虽然方便,但隐藏了一些细节,还是改用自己较喜欢的CMake,一开始没有注意链接的顺序,老是提示没有找到一些G3D 的 symbols,后来看其文档中,在errorfaq.html 的最后一条有写.
2009-09-19
using iCompile, now I can compile the program ,but it seems that this python script hide something from you.
2009-09-20:
现在在看了G3D的errorfaq.html的最后一条后,自己尝试编译,现在可以把rawOpenGL编译成功.编译的语句如下:
g++ -o main main.cpp -D__powerpc__ -L/usr/local/lib -ljpeg -lGLG3D -framework SDL -lpng -lG3D -framework OpenGL -framework AGL -framework Carbon -lavcodec -lavdevice -lavutil -lavformat -lzip -lz -ljpeg
(reference:http://g3d-cpp.sourceforge.net/manual/errorfaq.html)
原来自己在编译的时候,老是会发生链接的重定义的错误可能也与此相关(注意最后一个faq)
2009-09-21
今天在CMakeLists.txt中试了一下,在CMake产生的CMakeFiles/中有link.txt,实际上包含的就是链接时候的选项,但是用那个顺序去链接,老是说找不到G3D 中的 symbols, 后来在命令行中改用,之前在cmdline_OK中的参数顺序,则可以了.很可能与上述的链接顺序有关.
但是这个顺序好像比较奇特,是不是G3D做得不好,还是C++ 在链接的时候就需要这么一个依赖关系.
是这样的,在errorfaq中有描述:
To fix the wrong order of the dependencies. link GLG3D,G3D and then GL in that order. A sample compile command would look like:
g++ -L<DIRECTORY> -o<OUTPUT>.man.o -lGLG3D -ljpeg -lSDL -lpng -lG3D -lGL -lGLU
我自己写的用于编译例子程序的CMakeLists.txt如下:
Project(starter)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_BUILD_TYPE Release)
FILE(GLOB source_list *.cpp)
add_definitions(-D__powerpc__)
find_package(OpenGL REQUIRED)
find_library(CARBON_LIBRARY Carbon)
find_package(JPEG)
find_package(ZLIB)
# specify include paths during compilation
INCLUDE_DIRECTORIES(/usr/local/include ${OPENGL_INCLUDE_DIR} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
link_directories(/usr/local/lib ${OPENGL_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES})
# specify starter source
ADD_EXECUTABLE(starter ${source_list})
TARGET_LINK_LIBRARIES(starter GLG3D G3D ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} avcodec avdevice avutil avformat png jpeg z zip ${CARBON_LIBRARY})
# copy data-files to build directory
#todo: to make it run