3
A
回答
3
此編譯指示允許庫作者根據可在編譯時分析的一系列標準定義庫導入。例如,根據是否要鏈接,可以鏈接到不同的庫:
- 多線程開啓或關閉;
- 有問題的庫的共享或靜態版本;
- 標準運行時庫的共享或靜態版本;
- 調試或發佈庫;
- 32位或64位庫。
使用編譯指示形式,所有這些都可以通過#ifdef
預處理器測試在一個庫的頭文件中決定。
1
#pragma
對分發庫很有用。特別是如果針對不同的構建設置(例如,調試與發佈,多線程C運行時與單線程,DLL與靜態庫等)有不同的編譯.lib。您可以在代碼中使用#ifdef
來選擇正確的.lib文件,而不是要求用戶設置其構建環境以選擇正確的.lib文件。
它減少了支持時間,因爲您的用戶不能選擇錯誤的.lib文件。
1
這是一個MSVC-specific pragma這意味着指定的庫將在鏈接時自動包含。關於「只包含庫」的問題的其餘部分表明,您不理解頭文件和庫之間的區別:頭文件(GL/glut.h
)描述了編譯器在鏈接時可能期望的功能。該庫(lib/glut32.lib
)提供了這些功能的實現。
至於其他的答案已經解釋,它可以方便的,但我個人認爲這是一個可怕的想法利用這一點,因爲它增加了另一個障礙編寫移植代碼(其它平臺和編譯器可能不支持它)。 This question(謝謝,@martin clayton)解釋了爲什麼它不是便攜式代碼的好主意。
+0
是否沒有其他(流行)編譯器的等價物? GCC有類似的東西嗎? – Robinson 2015-06-29 09:12:19
相關問題
- 1. 什麼可以用來代替#pragma評論(lib,「Ws2_32.lib」)?
- 2. 的#pragma評論(LIB,「WINMM.LIB」)不工作
- 3. 無法調用SHGetKnownFolderPath()即使的#include <Shlobj.h>和#pragma評論(LIB, 「SHELL32.LIB」)
- 4. #pragma comment(lib)v #import?
- 5. 庫進口:的#pragma使用#pragma評論(LIB, 「../../xxx.lib」)</li> <li>評論VS Visual Studio項目輸入
- 6. Pragma評論C++
- 7. Perl的lib pragma是如何工作的?
- 8. 什麼是「ShowWindow Lib」user32「」?
- 9. C++:#pragma comment(lib,「XXX」)對「XXX」實際做了什麼?
- 10. 什麼是評論
- 11. 在EAR的lib上使用WEB-INF/lib的理由是什麼?
- 12. #pragma comment(lib,「xxx.lib」)在Linux下等價嗎?
- 13. gcc當量#pragma評論
- 14. Visual Studio:什麼是lib文件(用於)?
- 15. 什麼是文件usr/lib/opkg/info/initscripts.list
- 16. Windows中.lib的格式是什麼?
- 17. /usr/lib/vendor_ruby的目的是什麼
- 18. 什麼是打字稿`--lib`庫文件?
- 19. snmp4j lib中SNMP的目標是什麼
- 20. 什麼log lib用於nodejs?
- 21. 什麼是使用.EXP的,是什麼樣的.lib和.dll
- 22. 在Perl中,`use lib`和`lib-> import`有什麼區別?
- 23. simple project/lib和project/web/WEB-INF/lib有什麼區別?
- 24. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什麼區別?
- 25. /usr/local/lib/python2.6和/usr/lib/python2.6有什麼區別?
- 26. 爲什麼我的lib強制包含mfc40.lib?
- 27. G ++搜索/lib/../lib/,然後/ lib目錄/
- 28. 「評論」代表什麼「功能addComment(評論$評論)」
- 29. * .lib - 是否靜態?
- 30. C++爲什麼不創建.lib文件?
另請參閱:http://stackoverflow.com/questions/1685206/pragma-commentlib-xxx-lib-equivalent-under-linux – 2010-10-03 23:17:53