Qt下使用mac下编译好的OSG库

mac下编译osg 3.4.0一开始没成功,据说64位的OS X不能正常使用QT,但是我编译动态库的时候没有反选OSG_USE_QT,编译成功了,osgviewerQt例子也跑起来了,需要在cmake中加入
set(DESIRED_QT_VERSION "5" CACHE STRING "") set(CMAKE_PREFIX_PATH "/Users/Qt5.11.1/5.11.1/clang_64/" CACHE PATH "")
https://blog.csdn.net/huapenguag/article/details/51822134 CMAKE_PREFIX_PATH 应该指到包含Bin及lib的一级
https://www.cnblogs.com/xingzhensun/p/6251635.html
cmake中指定了qmake的路径后,再configure,其余的qt配置选项会自动加上,再手动指定路径即可,比如
Qt5_Widgets_DIR = /Users/Qt5.11.1/5.11.1/clang_64/lib/cmake/Qt5Widgets
编译静态库却报错,只好反选掉OSG_USE_QT,然后注释掉Qt的配置。
直接用Creator打开CMakelists.txt编译最方便。 编译好了以后,运行例子程序,成功。我新建一个qt工程却出问题了,报错symbol(s) not found for architecture x86_64,查了下qt在mac上面要检查deployment target版本号,然后修改QMAKE_MACOSX_DEPLOYMENT_TARGET的值。
这里可以查看到版本号
https://doc.qt.io/qt-5/supported-platforms-and-configurations.html
Qt 5.11 mac上有10.13,刚好是我现在的版本。
Darwin Platforms: macOS, iOS, tvOS, watchOS
macOS 10.11, 10.12, 10.13 (x86_64)
Clang as provided by Apple
Xcode 8.2 (macOS 10.11), Xcode 8.3.3 (macOS 10.12), Xcode 9 (macOS 10.13)
然后我在Qt 5.11.1的安装目录下找到qmake.conf  ,修改QMAKE_MACOSX_DEPLOYMENT_TARGET=10.13,默认版本号我没有记下来,这里做个记录,下次再查。
然后再clean 再编译,又碰到一堆问题,我以为还是库没编译好,但是发现都是项目里面用到的osg的类继承的基类虚函数没有实现,这就奇怪了,我干脆删掉所有代码和类,只保留一行代码osg::ArgumentParser arguments(&argc, argv);还是虚函数没实现的错误,我又查了下pro,发现没有引入libosg.dylib,加上以后,编译成功了。另外Qt5里不再用QtGui模块,而是使用QtWidgets模块,pro里加上QT += widgets
在ubuntu下编译osg,默认是编译的动态库,要编译静态库得修改几个地方,在CMakeModules目录下找到OsgMacroUtils.cmake文件,打开后找到ADD_LIBRARY,         SET(TARGET_TARGETNAME ${LIB_NAME} )         ADD_LIBRARY(${LIB_NAME}             ${OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC}             ${TARGET_H}             ${TARGET_H_NO_MODULE_INSTALL}             ${TARGET_SRC}         )
把OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC换成STATIC
用cmake打开osg目录下的CMakeLists,默认选中DYNAMIC_OPENSCENEGRAPH和DYNAMIC_OPENTHREADS这两个宏,设为false,mac下也照这样设置,也顺利编译好。
OSG_LIBRARY_STATIC和OT_LIBRARY_STATIC这两个宏有人设置了,但是我编译的时候没有设置。
然后打开Qt工程,在pro文件里面修改库,osgQt只有动态库,而osgViewer有静态库
LIBS+= -L/usr/local/lib64/ -losgQt
LIBS+= -L/usr/local/lib64/ -losgViewer PRE_TARGETDEPS +=/usr/local/lib64/libosgViewer.a
 cmakefile的Platform specific:有一行这样说的:OS X doesn't need GIF, JPEG, PNG, TIFF, etc because it uses QuickTime.注意:在OSX下可以通过Quicktime插件来读取tiff, jpef, gif and png,因此相关插件就不用在OSX下编译了。http://www.osgchina.org/index.php?option=com_content&view=article&id=108&Itemid=481

我在lib文件夹里看了下libosgdb_png.a确实没有生成,在项目里连接libosgDB.a就必须加入USE_OSGPLUGIN(png),这样就报错了,那这个地方就用libosgDB.dylib,尽量少用苹果的框架。

https://blog.csdn.net/u011043985/article/details/80641890 ubuntu14.04上编译OSG3.4.0静态库
https://blog.csdn.net/Wed_FanTaSy/article/details/52601638?locationNum=11&fps=1 osg 3.4.0 macos
https://blog.csdn.net/zmy12007/article/details/80287618 osg 3.6.0 qt
https://blog.csdn.net/csxiaoshui/article/details/46505719 osg 3.2.0
https://blog.csdn.net/wyy626562203/article/details/79254744/ qt cmake
http://king8010.popo.blog.163.com/blog/static/1088321320106283568982/
https://blog.csdn.net/lordofrobots/article/details/74006962
https://www.jianshu.com/p/5ace8441147d
https://wiki.qt.io/Build_Qt_5_PostgreSQL_Plugin_for_iOS
http://doc.qt.io/archives/qt-4.8/deployment-mac.html
https://blog.csdn.net/newyj/article/details/78838694
Qt pro配置详解
https://blog.csdn.net/liang19890820/article/details/51774724
Qtcreator使用中遇到的错误汇总
https://blog.csdn.net/damotiansheng/article/details/43159907

http://doc.qt.io/qt-5/osx-deployment.html
https://blog.csdn.net/happyrabbit456/article/details/50471860
https://blog.csdn.net/linfengmove/article/details/65445760
https://blog.csdn.net/chenyijun/article/details/52513314
https://blog.csdn.net/o_ocm/article/details/50198909
https://blog.csdn.net/youyudexiaowangzi/article/details/50251571
https://stackoverflow.com/questions/20342896/qt5-1-qt5-2-mac-os-10-9-mavericks-xcode-5-0-2-undefined-symbols-for-archi
https://forum.qt.io/topic/35065/solved-qt5-1-qt5-2-xcode-5-0-2-mac-os-10-9-mavericks-can-t-link-to-the-libraries-undefined-symbols-for-architecture-x86_64/12
https://forum.qt.io/topic/82333/specifying-qmake_macosx_deployment_target-doesn-t-work/2

猜你喜欢

转载自blog.csdn.net/tankweight/article/details/82691362