3 回答

TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊
C標(biāo)準(zhǔn)的規(guī)則對這些規(guī)則施加了一些限制(用于安全編譯):AC編譯器可能只查看標(biāo)識符的前8個字符,因此foobar2k_eggs和foobar2k_spam可以被有效地解釋為相同的標(biāo)識符 - 但是每個現(xiàn)代編譯器都允許任意長標(biāo)識符,所以在我們這個時代(21世紀(jì)),我們不應(yīng)該為此煩惱。
這不僅僅是現(xiàn)代編譯器的延伸; 當(dāng)前的C標(biāo)準(zhǔn)還要求編譯器支持合理長的外部名稱。我忘記了確切的長度,但如果我沒記錯的話,它就像31個字符。
但是如果你面對一些你無法改變符號名稱/標(biāo)識符的庫呢?也許你只有一個靜態(tài)二進制文件和標(biāo)題或者不想要,或者不允許自己調(diào)整和重新編譯。
然后你就被困住了。抱怨圖書館的作者。我曾經(jīng)遇到過這樣一個錯誤:我的應(yīng)用程序的用戶由于Debian的libSDL
鏈接而無法在Debian上構(gòu)建它libsoundfile
,這至少在當(dāng)時用可變的類似的方式污染了全局命名空間dsp
(我小時候你不會?。?。我向Debian抱怨,他們修復(fù)了他們的軟件包并將修復(fù)程序發(fā)送到上游,我認(rèn)為它已經(jīng)應(yīng)用了,因為我再也沒有聽說過這個問題。
我真的認(rèn)為這是最好的方法,因為它解決了每個人的問題。你做的任何本地黑客都會將問題留在庫中,以便下一個不幸的用戶再次遇到并與之抗?fàn)帯?/p>
如果你真的需要快速修復(fù),并且你有源代碼,你可以-Dfoo=crappylib_foo -Dbar=crappylib_bar
在makefile中添加一堆等來修復(fù)它。如果沒有,請使用objcopy
您找到的解決方案。
- 3 回答
- 0 關(guān)注
- 1049 瀏覽
添加回答
舉報