2014-04-02 68 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