我正在开发一个Math应用程序,可以通过编写python脚本来扩展它。
我正在使用Qt 4.6.3(构建为静态库,调试和发布版本)和Boost 1.43.0(构建为静态库,运行时链接也设置为静态,多线程版本,调试和发布)。一切都是用MSVC ++ 2008构建的。 Boost构建了以下库:
我的项目编译,但在链接阶段出现以下错误:
1>Linking...
1>LINK : fatal error LNK1104: cannot open file 'boost_python-vc90-mt-gd-1_43.lib'
为什么不选择我编译的库之一?
我认为库名中的s代表静态,但是自动链接功能似乎选择了一个动态库,我希望它在一个可执行文件中静态链接。
regex库也是如此:我编译了相同的4个正则表达式库并且快速测试显示了这个链接错误:
1>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc90-mt-gd-1_43.lib'
怎么办?
答案 0 :(得分:7)
您可以定义BOOST_ALL_NO_LIB。这可以防止自动链接boost库,然后必须手动链接所需的boost库。
答案 1 :(得分:3)
如果's'确实代表静态(我不清楚所有这些修饰符),请在编译时定义BOOST_ALL_DYN_LINK符号(将其添加到命令行选项中)。它告诉boost链接到DLL库。或者,编译/安装静态增强库。
答案 2 :(得分:3)
问题已解决,在编译boost库期间,我选择了link = static选项。这创建了静态库。我还选择了runtime-link = static选项,这是错误的!
此问题的解决方案是使用runtime-link = shared编译boost。现在添加了一些额外的库,其中包含正确的文件名,因此链接器可以找到它们。起初,编译器仍然会搜索dll库(boost_python-vc90-mt-gd-1_43.lib,而不是libboost_python-vc90-mt-gd-1_43.lib),其他所有内容从boost链接自动到静态库,但是因为boost.python有一个不同的自动链接设置,当你提供BOOST_PYTHON_STATIC_LIB时,它最终链接到正确的库,它可以工作!