VS2017完成靜態庫的搭建

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了Visual Studio2017寫靜態庫的相關資料,具有一定的參考價值,感興趣的小夥伴們可以參考一下

造輪子是一件有趣的事情,VS是一個強大的工具,能勝任超大規模的工程,但是講真,對不那麼大的項目配置起來不是那麼友好(網上的其他教程也一點都不友好Orz)。這裡就展示一下構建一個簡單的靜態庫的正確姿勢。(順便教一點道理

建立解決方案——許多人搞不清工程/項目Project和解決方案Solution的區別,在VS中,Project是基本的執行單元,一個Solution可以包含多個Project——我們的靜態庫就將會包含幾個(.lib)Project和一個(.exe)Project用作測試。解決方案選win32 Console Application控制台。

類型選Static Library靜態庫,去掉Precompiled Header先行編譯頭選項。

添加標頭檔和源檔案。

源檔案.cpp同理,之後應該是這個樣子:

(注意,只添加.h檔案而沒有.cpp是不行的,這樣一個工程編譯不出來.lib庫,之後你測試的時候就會出現" "xxx.lib": cannot open file specified"之類的報錯別問我怎麼知道的Orz)

(另一種回頭cannot open file specified的原因是.lib產生的位置不對,在這裡看Solution Explorer->Properties屬性頁面

->Output Direction輸出目錄

預設那個是對的在\Debug目錄下,誰知道怎麼會錯)

然後就可以寫代碼了:

//  MathLib.h#pragma onceint add(int x, int y);//  MathLib.cpp#include "MathLib.h"int add(int x, int y) { return x + y; }

然後你需要一個Project來測試(回想開頭說的,一個Solution可以有多個Project,它們都是執行單位(一會會再講到怎麼叫執行單位這是我自己造的概念)),在Solution Explorer裡面為Solution加入新工程:

選控制台,把先行編譯頭去掉和之前一樣,現在我們得到了一個含有倆Projects的Solution了:

編寫一段測試代碼

//  Test.cpp#include "stdafx.h"#include "..\MathLib\MathLib.h"#include <iostream>int main(){  std::cout << add(1, 2) << std::endl;  return 0;}

現在需要為Test添加MathLib的引用,這一步實際的作用是,在引導IDE用cl編譯器命令列編譯的時候,加入正確的連結選項(CSAPP有非常inspiring的講解,源檔案#include了標頭檔以後只是為連結器介紹了一堆未重定位的符號,它需要在庫檔案(靜態庫的話Linux是.a檔案Windows是.lib)裡找這些符號完成重定位),找到這些庫很重要。在Solution Explorer裡面Add Reference

VS很貼心地把Solution裡的Projects列進了備選項,選中即可。

此時Test的Reference裡就有MathLib工程了。

下一步,為cl編譯器添加include路徑,也就是說,先行編譯期應該怎麼找MathLib.h以完成符號的引入。在Test Properties屬性頁面->C++->General->Additional Include Directaries附加元件封裝含路徑,就是額外於標準庫標頭檔目錄的其他(自訂)標頭檔包含的目錄,cl要去這些地方找MathLib.h。選擇添加MyStaticLibrary\MathLib這個目錄OK。

這個時候萬事俱備,F5組建運行結果報了這麼個錯:

說.lib不是有效win32應用不能運行。對呀我本來也沒要運行它呀,可是VS怎麼知道Solution裡面這麼多Projects應該運行哪一個?(想想之前的執行單元理解到是什麼意思了吧,每個Project編譯的結果都認為可執行)第一個添加的Project是MathLib所以VS預設去運行它的輸出所以錯了。想辦法引導VS去運行Test的輸出(Test.exe),Solution Explorer->MyStaticLibrary Properties屬性頁面:

設單啟動工程為Test,OK。

【相關推薦】

1. ASP免費視頻教程

2. ASP教程

3. 李炎恢ASP基礎視頻教程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.