4
A
回答
7
源文件的名稱在鏈接過程中並不重要。
如果文件具有相同的內容,那麼你將有一個問題,假設.c文件包含導出的符號(例如非靜態或非模板函數,或EXTERN變量)。
3
這取決於。如果foo.c和foo.h定義了相同的函數和/或變量,那麼是的,會有多個定義錯誤。如果他們只有相同的文件名,但包含不同的代碼,則不會有問題。
0
如果你給出你的靜態庫,你不需要包含foo.c,因爲這將是lib的一部分,如果他們有自己的foo.c,它會混淆編譯器和鏈接器,並可能導致問題,如果你們都有類似的功能,或者它會包含錯誤的標題。
你解決這個最好的方法是使用一個命名空間因而你的代碼保持它的獨特。
namespace myfooname
{
void foo()
{
//stuff
}
}
2
鏈接的文件名
本身有問題最少的連接器,但有些IDE的會抱怨,如果文件被添加 - 即使他們是在不同的文件夾。但這通常不是什麼大問題。
不要發佈靜態庫(無源)
首先,你不應該獨自重新分配一個靜態庫。代碼和兼容性取決於編譯器,許多常用設置,比如哪些運行時庫(靜態/動態,調試/釋放,單線程已經從VC中解脫出來),一些C++設置,例如異常處理,虛擬成員函數指針表示等等。你最終需要構建數百種變體來支持主流編譯器,而且你最終還是需要一些與之相似的人。
始終包括源,因此用戶可以重建他的箱子靜態庫。或者使用動態庫 - 但它有自己的陷阱。
命名空間
如所提到的,使用命名空間來避免衝突。不要過量,如果你有源代碼,用戶可以隨時重新命名它。但請記住,using namespace
聲明不應出現在標題中,因此代碼需要稍微調整。
相關問題
- 1. VC++鏈接器刪除間接依賴於靜態庫
- 2. 當一個靜態庫依賴於另一個靜態庫時,是否需要指定鏈接依賴關係?
- 3. 靜態庫依賴關係
- 4. 靜態庫依賴關係
- 5. 靜態庫如何鏈接到依賴關係?
- 6. GCC不鏈接靜態庫依賴關係(makefile)
- 7. Xcode:自動鏈接靜態庫依賴項目
- 8. 自動鏈接一個靜態庫的依賴性
- 9. 將依賴關係鏈接到靜態庫?
- 10. g ++靜態庫依賴於動態庫
- 11. 動態鏈接庫具有依賴性
- 12. 靜態鏈接庫是否需要鏈接它們的依賴關係?
- 13. 鏈接需要鏈接兩個相互依賴的靜態庫:undefined reference
- 14. 靜態鏈接maven和gradle依賴關係
- 15. 混合靜態和共享庫時鏈接器的依賴關係
- 16. 靜態鏈接庫
- 17. 鏈接靜態庫與靜態庫
- 18. UNIX:靜態庫鏈接到靜態庫
- 19. C++鏈接的問題 - 動態與靜態庫的依賴關係
- 20. 如何將C++靜態庫與依賴於標準庫的XCode鏈接起來?
- 21. 依賴於其他靜態庫的靜態庫
- 22. 創建依賴於其他的靜態庫(RestKit)靜態庫
- 23. 建立依賴於另一個靜態庫的靜態庫
- 24. 靜態和動態庫鏈接
- 25. 靜態和動態鏈接庫
- 26. 鏈接動態和靜態庫RCPP
- 27. gcc鏈接共享庫與依賴庫
- 28. 未定義的引用鏈接自己的靜態庫時,它本身依賴於靜態庫
- 29. Visual Studio:靜態鏈接到靜態庫
- 30. 如何編譯靜態鏈接依賴關係的autotools項目?
所有你提到靜態庫,造成問題的問題,也與任何編譯的代碼會導致問題的DLL,確實。 – 2009-06-12 07:49:08