目录
我编译成功的版本是使用了window10、window11 vs2019 ,三方dll是下载的2017full版本的。但是我在vs2017 同样的三方dll,编译确实一堆报错。如下:
LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\osgUtil.lib”
已完成生成项目“osgDB.vcxproj”的操作 - 失败。
这样子的语句。很大程度是要编译失败了。在window11+vs2017上没有编译成功。
使用的三方dll来之官网下载。(备注vs2019是 v141,就很离谱,2017编译不成功,19反而可以)
编译正常的界面大体是这样的。能够看到输出正常的dll
总结:
window10\window11+vs2019+3rdParty_VS2017_v141_x64_V11_full 能够编译成功。
1、代码和第三方库准备
代码
GitHub - openscenegraph/OpenSceneGraph at OpenSceneGraph-3.6.5
官方数据
Data Resources (openscenegraph.com)
第三方dll
Dependencies (openscenegraph.com)
2、使用cmake将代码构建成vs工程
配置之后会使用到我们所下载的三方dll,这会按两次configure
第一次:根据vs版本进行配置,然后界面会爆红,因为找不到三方库
第二次:选择好三分库之后,在点一次config,cmake会自己去给相应的模块找对应的三方库目录
(备注:三方库里边的dll是不全的,涉及其他插件,需要自己去下对应的库,设置进去编译。)
3、点击generate,生成解决方案。
如果example没有勾选,这里是不会用demo的
4、点击批生成---批生成--按下图设置进行编译,按生成后开始编译,
5、接下来就是安安静静等待编译。
6、在编译install,这个步骤就类型cmake 里边的cmake install 一样,把编译成功的文件,复制一遍到设置的输出目录中。
生成成功
7、bulid出来的解决方案下 bin,lib,src和include也复制到生成目录,把官方数据data也放进来。然后配置环境变量。
8、设置环境变量
测试一下,随便执行一个程序:
到这一步,则按照完成。
1、使用绝对路径进行配置
工具->选项->项目解决方案->VC++目录,分别设置OSG的头文件及库文件
包含文件里添加:F:\...\OSG\include
库文件添加:F:\...\OSG\lib
2、使用环境变量进行配置
方法一有个问题是我们把引用的目录和lib设置成绝对路径了,这样如果你的测试demo发到别人电脑,别人电脑上OSG的目录和工程里设置的目录不一样,工程就会找这个目录而报错,我觉得OSG设置成环境变量最好,这样比人用你的Demo时只要按着你的环境变量设置就行了。
我们在系统环境变量中添加新变量OSG_SDK
备注:以下步骤参考之:OSG+VS2015 测试Demo - 爱码网 (likecs.com)
3、以下步骤是上边两个操作任选一之后都要做的
链接器–>输入–>附加依赖项,添加.lib文件的依赖项如下:
- OpenThreadsd.lib
- osgd.lib
- osgDBd.lib
- osgUtild.lib
- osgGAd.lib
- osgViewerd.lib
- osgTextd.lib
如果是release版本,则lib后边不需要带一个d字母即可。
- #include
- #include
- #include
-
- int main()
- {
- osgViewer::Viewer view;
- view.setSceneData(osgDB::readNodeFile("cow.osg"));
- return view.run();
- }
运行如下:
1、cmakelists写法
备注:find_package一定要写用到的模块,不然target_link_libraries 链接不到。
- # CMakeList.txt: osgtest 的 CMake 项目,在此处包括源代码并定义
- # 项目特定的逻辑。
- #
- cmake_minimum_required (VERSION 3.8)
-
- find_package(OpenSceneGraph REQUIRED osgDB osgViewer)
-
- include_directories(${OPENSCENEGRAPH_INCLUDE_DIR})
- # 将源代码添加到此项目的可执行文件。
- add_executable (osgtest "osgtest.cpp" "osgtest.h")
-
- target_link_libraries(${PROJECT_NAME} ${OPENSCENEGRAPH_LIBRARIES})
- ##
- ## Miscellaneous Microsoft Visual Studio settings
- ##
- if (MSVC)
- # Set the startup project .
- if (NOT ${CMAKE_VERSION} VERSION_LESS "3.6.0")
- set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
- endif ()
- endif (MSVC)
- # TODO: 如有需要,请添加测试并安装目标。
2、编写demo
- #include
- #include
- int main(int argc, char** argv)
- {
- osgViewer::Viewer viewer;
- viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
- return viewer.run();
- }
如图: