我正在開發一個程序,它生成某些部分作爲c/C++庫。 例如它會創建目錄 - lib1,lib2,..,libN。 對於每個庫,它生成c/C++代碼+ Makefile,然後使用gcc/g ++ + ld,最後它調用庫中的代碼。 現在的問題是,如果lib1具有函數fun
和libN,那麼當從libN調用fun
時,將使用lib1。 我已經嘗試不同版本的gcc/g ++到v4.7。gcc/g ++/ld緩存?
0
A
回答
3
現在的問題是,如果lib1有一個函數fun和libN,當從libN調用fun時,會使用lib1。
想必你正在談論共享庫,而不是歸檔庫(在那裏你會得到一個多重定義的符號錯誤)。
是的,這是它應該如何工作的,並且總是有在UNIX上工作。緩存有什麼也沒有與它做。
如果你在ELF平臺上,你也許能使其利用-Wl,-Bsymbolic
工作更類似於Windows,但你會戰鬥系統默認的行爲,應該期望坎坷不平,和許多意想不到的疑難雜症的的。如果fun
不需要從libX
公開,隱藏symbol visibility是你的朋友。
由於您正在生成lib1
,... libN
的代碼,因此可能更容易避免使用例如名稱衝突。 libX_fun
而不是fun
。這也會更便攜,因爲它只會在任何地方工作。
更新:
函數名具有真正根據接口規範是有趣的。
根據誰的接口規格?
你顯然控制了主程序和庫。所以你可以,而且可能應該改變接口規範來避免這個問題。
相關問題
- 1. IIS緩存和HTTP緩存
- 2. Web.config緩存和.NET緩存
- 3. C# - 緩存加載緩存
- 4. HTTP緩存:緩存控制
- 5. FIFO緩存vs LRU緩存
- 6. 可緩存對象緩存
- 7. 緩存或不緩存
- 8. Django緩存 - 清除緩存
- 9. 用Symfony2緩存API緩存
- 10. 內存與LD和AR重疊命令
- 11. 爲什麼g ++/ld內存不足?
- 12. Json-LD:使用Json-LD鏈接文檔
- 13. 內存緩存
- 14. 訪問緩存從緩存中緩存對象
- 15. 「緩存:false」PREVENT緩存還是UNIQUE-IFY請求繞過緩存?
- 16. W3總緩存不緩存JavaScript緩存之前加載CDN jquery
- 17. 緩存
- 18. 緩存
- 19. 緩存
- 20. Symfony緩存問題(緩存部分)
- 21. 系統緩存vs無緩存
- 22. C#緩存使用緩存依賴
- 23. Wp總緩存和W3超級緩存
- 24. Asp.net緩存或手動緩存
- 25. Grails \ Hibernate:緩存還是不緩存?
- 26. Hibernate一級緩存vs查詢緩存
- 27. 一個緩存vs多個緩存
- 28. ASP.NET InProc緩存vs分佈式緩存
- 29. 用Redis緩存替換Windows Azure緩存?
- 30. 爲緩存文件禁用APC緩存?
根據接口規範,函數名稱真的很有趣。 – nil 2012-07-08 10:04:47
'-Wl,-Bsymbolic'沒有幫助。但是,我在libX完成工作後立即使用'dlclose'解決了這個問題。如果我想同時使用'lib1',','libN',這將不起作用。 – nil 2012-07-08 10:10:48
有一個預編譯的調用'fun'的MATLAB代碼,在運行時重新編譯它會代價太大。 – nil 2012-07-09 00:00:25