我不知道如何「包裝」 C++的發佈項目。它採用各種庫,我不希望用戶不得不通過相同的設置我所做的,與把正確的文件在正確的地方和這樣的。我很難研究這個問題,因爲我不確定這個問題的技術術語。如果我在Linux上使用命令行編譯,有沒有簡單的方法來做到這一點?如何打包C++與DLL和庫
回答
您對這種做法將在Windows和Linux不同,因爲每個操作系統處理這個問題的方式不同。我更熟悉Linux,因此我將答案限制在Linux的一面。
當使用-l標誌鏈接器默認與庫鏈接可執行看在正常系統庫的目錄,所以這裏有四種方法。
要求用戶自己正確安裝庫。但是,這聽起來像你不想這樣做。
讓用戶添加庫位置LD_LIBRARY_PATH變量。
你的第三個選擇是強制鏈接中使用-rpath標誌庫一定的路徑看。例如,爲了讓應用程序在其工作目錄中查找共享庫,您可以使用以下代碼進行編譯:
g++ -rpath ./ -l SomeLib -o MyApp myapp.cpp
另一個選項是將您的代碼與其庫進行靜態鏈接,這樣您只需分發一個可執行文件。如果靜態庫中存在,您可以使用
g++ -static -l SomeLib -o MyApp myapp.cpp
告訴GCC靜態鏈接。
你的意思是一個安裝程序?
在Windows您運行安裝新的應用程序,它出局一切都在正確的目錄,創建開始菜單,讓你的程序未安裝?
有在Visual Studio安裝程序生成器(可能不是在免費版本),這使得.msi安裝文件。使用簡單的任務相當容易,但要做更多的事情會變得複雜。
或者,創建傳統的setup.exe類型安裝我用的是優秀的免費Innosetup
在Linux上,你會使用一般創建一個包的任何格式分發用途(.deb文件/的.rpm)。有很多在每一個細節和工具的說明這樣做將可能已經被安裝在你的Linux系統
在Windows上我會威克斯推薦給http://wix.sourceforge.net/創建.msi安裝 我想指出的是,爲的.dll我將推薦所有.dll文件在同一文件夾中,因爲這是你的.exe文件的查找路徑具有最高優先級
但VC CRT(在C/C++運行時庫)應使用再分配包從微軟安裝 - >自動更新http://www.microsoft.com/de-de/download/details.aspx?id=5555
維克斯可包括再分配包入同一的.msi因此您只需部署一個安裝程序文件。
- 1. 包括庫和dll到C++項目
- 2. 包括OpenCV庫DLL與CMake
- 3. 從C#打包C++ DLL的問題#
- 4. 如何在基於C的dll或基於CLI的dll中打包C++類?
- 5. 如何爲Cocoa項目打包C庫?
- 6. 如何打包帶庫和配置
- 7. 如何將圖像打包到DLL中的C#
- 8. Java包與C++庫
- 9. 依賴大量本地DLL整齊打包C++/CLI DLL
- 10. 打包nodejs C++共享庫
- 11. 如何從lib和python27.dll中打包主要.exe的python.py
- 12. C#:如何包含依賴的DLL?
- 13. VC++/Dev-C++:如何包含一個DLL?
- 14. C#包裝類爲c + +的DLL dll
- 15. 如何打包與setuptools的
- 16. java.lang.ClassFormatError異常與庫打包爲OSGi包
- 17. 鏈接與託管C++類庫DLL
- 18. 自動執行C++庫的C#打包
- 19. 合併Win32 C++ dll與託管C++ dll
- 20. 如何使用C++/CLI打包C++類
- 21. Boost庫和dll
- 22. C++和打包結構
- 23. GIT C/C++庫作爲DLL
- 24. C#的Web服務和dll庫
- 25. 如何將DLL引用添加到ASP.NET C#Web應用程序(該DLL是底層C庫的包裝)
- 26. 如何在使用rcpp/rinside包時使用makefile包含dll庫
- 27. 如何鏈接(C++)與重命名的Python .lib和.dll?
- 28. C++ dll和WPF
- 29. c#2010和DLL
- 30. 如何創建NIM DLL和C#
正在編譯Linux上的dll? – Attila
對不起,我很愚蠢,我現在正在Linux和Windows上開發,而且我必須爲我的兩個庫進行大量設置。我是一個新手,可能會混合兩個。我必須鏈接到圖書館,我在Windows上使用dll(至少我認爲那是發生在那裏)。我正在編輯這個問題只是說圖書館,因爲我不知道事物之間的正確技術區別。 – akroy
庫有兩個版本:靜態和動態。靜態庫直接與可執行文件鏈接,因此您不必擔心將它們放在任何位置(代碼是可執行文件的一部分)。使用動態庫時,您需要確保運行時可以找到它們:您需要將它們放在一個公共路徑中,或者爲庫設置搜索路徑以包含它們所在的目錄。請閱讀[兩個]( http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html)[文章](http://www.eyrie.org/~eagle/notes/rpath.html)瞭解更多信息。 – Attila