我在Visual Studio 2010中有一個非託管的C++項目。它使用boost,glut和來自供應商的另一個庫。Visual Studio 2010中的動態和靜態鏈接和部署
我已經建立了項目來創建一個更「dll-indepenendent」的可執行文件。所有boost庫都是靜態鏈接的,並且在可執行文件所在的目錄中不需要dll。
同樣的事情爲Glut,我已經鏈接靜態glut32.lib而不是glut32.dll,並再次沒有問題。
我已經爲運行時庫選擇了NON-dll版本,即Multithreaded Debug(用於調試配置)和Multithreaded for Release配置。
現在,我以前說過的供應商提供了兩個替代品Vendor.lib和Vendor.dll。
Vendor.lib被添加到鏈接器 - >其他依賴項中,但是在運行時我總是必須將Vendor.dll放在可執行文件的同一目錄中,否則運行時環境會抱怨,因爲它沒有找到Vendor .dll庫。
我應該如何解決這個問題?我想避免在每個目錄中放入.dll文件。
我不想把dll放在exe文件的同一目錄中,一般來說,在Visual Studio中部署非託管C++控制檯應用程序的準則是什麼?
我知道有很多關於這個論點的問題和網頁,但沒有一個澄清我這一點。
有些想法?
這不是MS特定的。 Linux也有導入庫。 – rubenvb 2012-03-05 14:18:46
Unix有兩種類型的「庫」:庫(.a文件)和共享對象(.so文件)。提供庫(一般意義上)的供應商通常會提供這兩種庫。如果您使用.a文件進行鏈接,則可以靜態鏈接,如果使用.so鏈接,則可以動態鏈接。與Microsoft解決方案的問題是1)您有兩個不同的文件用於動態鏈接,並且2)其中一個文件具有與靜態庫相同的名稱。 – 2012-03-05 14:21:10
謝謝你的回答。也許我不是唯一一個對這個話題感到困惑的人。所以,正如你所說,有兩種.lib文件,一種是在需要動態庫時創建的,另一種可以是靜態庫。我沒有找到另一個Vendor.lib文件,所以我想我是第一個案例...謝謝! – linello 2012-03-05 14:34:28