C++程序需要同样一个库的动态库和静态库会发生什么事

tom555cat 2013-03-20 03:16:43
我使用Boostpro安装boost库文件。
需要编译一个代码,先使用cmake的cmake ..命令在build下生成了一堆东西。其中有一个文件叫“CMakeCache.txt”(我不知道这个文件时干什么的,但根据里面内容猜测是确定要导入一些库的路径),其中和boost相关的描述是这样的:
//The Boost DATE_TIME library
Boost_DATE_TIME_LIBRARY:FILEPATH=optimized;C:/Program Files (x86)/boost/boost_1_47/lib/boost_date_time-vc90-mt-1_47.lib;debug;C:/Program Files (x86)/boost/boost_1_47/lib/boost_date_time-vc90-mt-gd-1_47.lib

//Boost date_time library (debug)
Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=C:/Program Files (x86)/boost/boost_1_47/lib/boost_date_time-vc90-mt-gd-1_47.lib

//Boost date_time library (release)
Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=C:/Program Files (x86)/boost/boost_1_47/lib/boost_date_time-vc90-mt-1_47.lib

//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=Boost_DIR-NOTFOUND

//The Boost FILESYSTEM library
Boost_FILESYSTEM_LIBRARY:FILEPATH=optimized;C:/Program Files (x86)/boost/boost_1_47/lib/boost_filesystem-vc90-mt-1_47.lib;debug;C:/Program Files (x86)/boost/boost_1_47/lib/boost_filesystem-vc90-mt-gd-1_47.lib

//Boost filesystem library (debug)
Boost_FILESYSTEM_LIBRARY_DEBUG:FILEPATH=C:/Program Files (x86)/boost/boost_1_47/lib/boost_filesystem-vc90-mt-gd-1_47.lib

//Boost filesystem library (release)
Boost_FILESYSTEM_LIBRARY_RELEASE:FILEPATH=C:/Program Files (x86)/boost/boost_1_47/lib/boost_filesystem-vc90-mt-1_47.lib

还有Boost的其他的库的类似上诉的描述。
上面CMakeCache.txt描述的Boost库都是不加lib前缀的,但是编译时出现这样的问题
cmake命令生成了一个可以在VS下编译的项目,用VS2008打开编译提示:

1>------ Build started: Project: training, Configuration: Release Win32 ------
2>------ Build started: Project: frontend, Configuration: Release Win32 ------
1>Linking...
2>Linking...
1>LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc90-mt-1_47.lib'
2>LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc90-mt-1_47.lib'


缺少这些库,我在Project: training中添加上了libboost_XXX的库,然后Project: training就没有错误提示了。
但是在Project: frontend中添加上libBoost的库,提示:
libboost_program_options-vc90-mt-1_47.lib(convert.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl boost::program_options::to_internal(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?to_internal@program_options@boost@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV34@@Z) already defined in boost_program_options-vc90-mt-1_47.lib(boost_program_options-vc90-mt-1_47.dll)

出现error LNK2005:错误,应该是重复定义的问题。
我想问一下这不导入libboost库提示找不到,导入又有重复定义的问题,这该怎么解决啊。
...全文
218 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
沈小夕 2013-03-21
  • 打赏
  • 举报
回复
沈小夕 2013-03-21
  • 打赏
  • 举报
回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧