現在編程有太多的好用的第三方庫,例如
使用這些庫給我們帶來了極大的便利,同時也有很多困擾。這個工程在我電腦上明明很好用的,但是為什么在你電腦上就沒法編譯呢?
這是工程配置的不好造成的。很多人在配置工程引用文件的時候使用絕對地址,例如配置opencv的include文件,配置地址為C:\opencv\build\include\opencv。但是在另一個電腦上,opencv可能不在這個地址,這時候vs就無法找到相應的頭文件,所以會造成編譯失敗。
那么怎么解決呢?
第一種解決方法就是vs提供的nuget來對引用的庫進行管理。類似*unix系統里的包管理,他會管理項目所需要的庫文件,以及其依賴項。
這里以opencv為例子講解。選擇工具->NuGet程序包管理器->管理解決方案的NuGet程序包。
這里可以看到我使用了四個程序包,在你的解決方案里應該是沒有程序包的。點擊聯機,去搜索需要的程序包。
這里我在右上角輸入了opencv進行搜索,可以看到搜索出了許多關於opencv的程序包。選擇你需要的程序包。由於我已經安裝過了,所以可以看到一個對勾。如果你沒有安裝,就如我選擇的opencvsharp3,點擊安裝。
之后會自動下載,並安裝,然后讓你選擇你需要使用程序包的工程。就完成了。
之后在解決方案上右鍵,選擇Enanble NuGet Package Restore,就可以啟用NuGet程序包。然后就可以在項目里使用opencv了。而且拷貝到其他電腦上也只需要恢復一下就可以使用。
方法二:
但是方法一需要有人在nuget上維護你需要的庫,如果沒有的話就沒辦法。拿我的在做的項目來說,opencv的庫是有的,但是相機的庫就沒有。那么還是需要自己手動管理庫文件,但是稍微修改以下配置方法。就是把需要的第三方庫放在解決方案文件夾里,然后使用相對路徑的方式進行引用。
對於包含目錄(include),原來的配置方式和相對路徑配置方式對比如下。這里,相對路徑是相對於工程文件(*.vcxproj)所在的目錄。兩個點(..)表示當前目錄的上一個目錄,這里的意思就是在工程文件上一個目錄里的那一堆路徑下。這樣配置完之后就可以在不同的電腦上使用了。
對於用於鏈接的庫文件(*.lib)也是同樣的道理,然后在將需要使用的.lib文件添加到鏈接器->輸入->附加依賴項。
通過上面兩個配置,將解決方案需要用到的庫文件都配置完成,並且可以在不同的電腦上進行編譯。
可能遇到的錯誤:
1.NuGet Error:Unable to find version '2.4.11' of package 'OpenCV.overlay-x64_v120_Release'.
進入命令行的NuGet 包管理器控制台,然后手動安裝這個包。
Install-Package OpenCV.overlay-Win32_v140 -Version 2.4.11
解決方法來源:https://libraries.io/nuget/OpenCV.overlay-Win32_v140_Debug
只是在這里,他安裝的指明了debug版本,我試了不好用個,就刪掉了
2.NuGet Error:未知命令:“overlay”
刪除解決方案下的.nuget文件夾,重新生成解決方案。
解決方案來源:https://blog.csdn.net/u011185952/article/details/52577620