查看: 4672|回复: 12

请教array等专家如何编译osg3.0.1静态库?

[复制链接]

该用户从未签到

发表于 2012-9-26 17:32:00 | 显示全部楼层 |阅读模式
本帖最后由 kangsite 于 2012-9-27 10:29 编辑

我在编译0sg3.0.1时出现一些问题,请问各位如何解决

1>------ 已启动生成: 项目: Examples osgstaticviewer, 配置: Debug Win32 ------
1>正在执行预链接事件...
1>正在链接...
1>   正在创建库 E:\OSG\OpenSceneGraph-3.0.1\build\lib\osgstaticviewerd.lib 和对象 E:\OSG\OpenSceneGraph-3.0.1\build\lib\osgstaticviewerd.exp
1>osg80-osgUtild.lib(CullVisitor.obj) : warning LNK4049: 已导入本地定义的符号 ??0Mutex@OpenThreads@@QAE@W4MutexType@01@@Z (public: __thiscall OpenThreads::Mutex::Mutex(enum OpenThreads::Mutex::MutexType))
1>osg80-osgGAd.lib(EventQueue.obj) : warning LNK4049: 已导入本地定义的符号 ??0Mutex@OpenThreads@@QAE@W4MutexType@01@@Z (public: __thiscall OpenThreads::Mutex::Mutex(enum OpenThreads::Mutex::MutexType))
1>osg80-osgd.lib(Referenced.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic:perator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(StateSet.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(UserDataContainer.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osgstaticviewer.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(ArgumentParser.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(Node.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(ApplicationUsage.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::operator++(void)" (__imp_??EAtomic@OpenThreads@@QAEIXZ)
1>osg80-osgd.lib(Referenced.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall OpenThreads::AtomicPtr::~AtomicPtr(void)" (__imp_??1AtomicPtr@OpenThreads@@QAE@XZ),该符号在函数 "protected: virtual __thiscall osg::Referenced::~Referenced(void)" (??1Referenced@osg@@MAE@XZ) 中被引用
1>osg80-osgd.lib(Referenced.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall
1>osg80-osgDBd.lib(DatabasePager.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __thiscall OpenThreads::Atomic::exchange(unsigned int)" (__imp_?exchange@Atomic@OpenThreads@@QAEII@Z),该符号在函数 "public: __thiscall osgDB:atabasePager::DatabasePager(void)" (??0DatabasePager@osgDB@@QAE@XZ) 中被引用
1>E:\OSG\OpenSceneGraph-3.0.1\build\bin\osgstaticviewerd.exe : fatal error LNK1120: 9 个无法解析的外部命令
1>生成日志保存在“file://e:\OSG\OpenSceneGraph-3.0.1\build\examples\osgstaticviewer\example_osgstaticviewer.dir\Debug\BuildLog.htm”
1>Examples osgstaticviewer - 1381 个错误,160 个警告
========== 生成: 成功 0 个,失败 1 个,最新 43 个,跳过 0 个 ==========

该用户从未签到

 楼主| 发表于 2012-9-26 21:51:29 | 显示全部楼层
自己先顶了

该用户从未签到

发表于 2012-9-27 09:14:08 | 显示全部楼层
添加对应的lib

该用户从未签到

发表于 2012-9-27 10:10:59 | 显示全部楼层
您是如何选择静态编译的?是否设置了对应的CMAKE选项?

该用户从未签到

 楼主| 发表于 2012-9-27 10:26:35 | 显示全部楼层
本帖最后由 kangsite 于 2012-9-27 10:42 编辑

刚刚解决了。。好像是cmake设置问题。我重新弄了make了一下 就可以了。。
多谢了。。

该用户从未签到

发表于 2012-10-11 18:08:14 | 显示全部楼层
kangsite 发表于 2012-9-27 10:26
刚刚解决了。。好像是cmake设置问题。我重新弄了make了一下 就可以了。。
多谢了。。

刚编译静态库后运行程序也出了这个问题,请问你具体都改了什么设置,可否告诉下

该用户从未签到

发表于 2012-10-30 23:23:56 | 显示全部楼层
kangsite 发表于 2012-9-27 10:26
刚刚解决了。。好像是cmake设置问题。我重新弄了make了一下 就可以了。。
多谢了。。

你好 我也想请问下 OSG静态库cmale里要怎么弄才正确调用啊 我在c**和c里都加了/DOSG_LIBRARY_STATIC 然后把那个动态的也给去掉了 玩了以后还把MD的都改为MT的了 怎么编译后还是会遇到错误呢
错误        1730        error LNK2005: "private: class type_info & __thiscall type_info:perator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义        D:\OSGBuild\applications\present3D\MSVCRT.lib(ti_inst.obj)
等等 一共有52个

该用户从未签到

发表于 2012-10-31 07:40:15 | 显示全部楼层
w910916 发表于 2012-10-30 23:23
你好 我也想请问下 OSG静态库cmale里要怎么弄才正确调用啊 我在c**和c里都加了/DOSG_LIBRARY_STATIC 然后 ...

只需要在CMake中选择相应的选项就可以了,其他的不要动

该用户从未签到

发表于 2012-10-31 09:27:04 | 显示全部楼层
liuzhiyu123 发表于 2012-10-31 07:40
只需要在CMake中选择相应的选项就可以了,其他的不要动

相应的项是哪些啊 你能够告诉下我吗 我在网上找的也不行  我下载的是3.01版本的

该用户从未签到

发表于 2012-10-31 13:22:40 | 显示全部楼层
w910916 发表于 2012-10-31 09:27
相应的项是哪些啊 你能够告诉下我吗 我在网上找的也不行  我下载的是3.01版本的

DYNAMIC选项

该用户从未签到

发表于 2012-10-31 14:46:17 | 显示全部楼层
静态库编译时要不要把MD换成MT的,我在网上查有说要换的,也有没提到的。

该用户从未签到

发表于 2012-10-31 14:56:20 | 显示全部楼层
liuzhiyu123 发表于 2012-10-31 13:22
DYNAMIC选项

怎么只把Dynamic的两个勾给去掉以后编译有错误呢

该用户从未签到

发表于 2012-10-31 15:04:14 | 显示全部楼层
w910916 发表于 2012-10-31 14:56
怎么只把Dynamic的两个勾给去掉以后编译有错误呢

总不能让我猜什么错误吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表