编译osg程序遇到ifstream和ofstream库多重定义错误

因为osgDB有自定义的ifstream和ofstream,和std标准库,所以我的一个程序报了错

错误    LNK2005    "public: __cdecl std::basic_ifstream<char,struct std::char_traits<char> >::basic_ifstream<char,struct std::char_traits<char> >(void)" (??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@XZ) 已经在 Configuration.cpp.obj 中定义    D:\osg\osgRotateTest    D:\osg\osgDBd.lib(osg130-osgDBd.dll)  

因为我用cmake管理vc的工程,不好在链接命令行加/FORCE:MULTIPLE ,我看了看怎样在cmakelists文件里设置链接选项,

target_link_options(${PROJNAME} PUBLIC $<$<CXX_COMPILER_ID:MSVC>:/FORCE:MULTIPLE>)

把这个加入CMakelists文件,重新编译,没有报错了,这是windows下Visual studio 2019里的做法,我还得在linux下试试。有的人的做法不一样,是在cmake配置时,把每个模块目录路径都设置为osg的root目录,我先记录一下,再做做实验研究一下人家的做法。

 

https://stackoverflow.com/questions/58008297/how-to-add-compile-flags-in-cmake-on-windows

 

另外附上我的cmake文件

####

cmake_minimum_required( VERSION 2.8 )
project(osgRotateTest)


find_package(OpenSceneGraph REQUIRED COMPONENTS OpenThreads osg osgWidget osgText osgSim osgDB osgGA osgUtil osgViewer osgManipulator)
INCLUDE_DIRECTORIES( include
                    ${OPENSCENEGRAPH_INCLUDE_DIR}
                    ${PROJECT_SOURCE_DIR}/inclde
                    ${PROJECT_SOURCE_DIR}/application
                    )
LINK_DIRECTORIES(${OPENSCENEGRAPH_LIB_DIR})


file(GLOB srcs "*.h" "*.cpp"
"pong/*.cpp"
"Project/*.cpp"
"helicopter/*.cpp"
"helicopter/tests/*.cpp"
)

macro( config_project PROJNAME LIBNAME )
include_directories( ${${LIBNAME}_INCLUDE_DIR} )
target_link_options(${PROJNAME} PUBLIC $<$<CXX_COMPILER_ID:MSVC>:/FORCE:MULTIPLE>)
target_link_libraries( ${PROJNAME} ${${LIBNAME}_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES})
endmacro()
add_executable( MyProject  ${srcs})
config_project( MyProject OPENTHREADS )
config_project( MyProject OSG )
config_project( MyProject OSGGA )
config_project( MyProject OSGTEXT )
config_project( MyProject OSGDB )
config_project( MyProject OSGUTIL )
config_project( MyProject OSGVIEWER )
config_project( MyProject OSGMANIPULATOR )

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值