2014-04-02 47 views
9

当我使用Visual Studio 2012自动链接时,我不需要手动添加boost/POCO/python库,它们会自动添加。 如果我错过任何一个图书馆,我得到消息,这样的:如何增强自动链接选择?

LINK : fatal error LNK1104: cannot open file 'libboost_system-vc110-mt-1_55.lib'

但它是如何知道我要链接的文件?也许我想动态链接,使用boost_system-vs110-mt-1_55.lib,或者我想要一个与gdsgd的名字?

它是如何选择的?

问题是,我的程序正在寻找libboost_ ...(即静态)库,当搜索系统,线程等,但它需要boost_(即动态)的python,我只是不明白为什么?

+0

如果你通过“自动链接”指的是使用dll,那么也不会让你免于链接.libs。为了在运行时使用dll,您需要在编译时了解这些dll的内容,这就是.lib文件的作用。关于哪个版本,运行时和mt/md(你正在编译什么样的运行时模块,你可以看到你的项目的VS选项),你应该首先检查你的项目来决定。 –

+0

是的,我明白如何自己选择,使用MinGW编译该项目,我没有问题。但是Visual Studio需要自己选择,所以我不能选择,它为我所用。我想知道为什么会这样做。我的问题确实是 - Visual Studio如何实现它的选择以及如何管理它? – Arkady

+0

你也可以从VS中控制它,查看Linker-> Input窗格中链接时包含的.libs以及链接器 - >常规 - >其他链接目录(IIRC) –

回答

5

Visual Studio允许#pragma指令在源代码中设置链接器选项。对于“自动链接”,Boost将这些#pragma's与现有宏组合使用。

特别是,它听起来像你正在寻找BOOST_ALL_DYN_LINK宏。

+0

正如我从boost/system/config.hpp所了解到的,如果没有定义BOOST_ALL_DYN_LINK,我必须将所有库链接为静态,除python之外的所有库。 我真的想把所有的库链接成静态的,所以这个标志正是我需要的,并且默认的宏已经足够好了。但即使我手动添加它(BOOST_ALL_STATIC_LINK),它也不起作用。 不知何故,我的编译器认为boost.python不能是静态的。即使标志BOOST_ALL_STATIC_LINK存在,它也会询问动态python库。我不知道要在哪里寻找解决办法。 – Arkady

+0

@Arkady:尝试具体,使用'BOOST_PYTHON_STATIC_LIB' – MSalters