近期遇到問題總結

一、Linux下編譯動態庫時,去除不但願顯示的符號(2017年9月23日)html

編譯出so以後,用nm -D xx.so能看到庫中全部符號。linux

爲去除不但願看到的符號,在編譯so時,使用gcc參數-fvisibility=hidden,以設置默認隱藏全部符號,對於想顯示的符號,函數定義前加入__attribute__((visibility ("default")))便可。ubuntu

若是編譯so時,用到了靜態庫,則靜態庫中全部符號也會顯示在內,而上面這種設置方式只對本次編譯生成的.o文件有效,屏蔽靜態庫的符號,可以使用參數:-Wl,--exclude-libs,ALL,還有至少兩種方法,一是手動刪除特定的符號,二是使用version script手動控制導出符號,參見下面連接。app

https://stackoverflow.com/questions/2222162/how-to-apply-gcc-fvisibility-option-to-symbols-in-static-libraries函數

https://stackoverflow.com/questions/9909528/how-can-i-remove-a-symbol-from-a-shared-objectspa

http://anadoxin.org/blog/control-over-symbol-exports-in-gcc.htmlunix

 二、ubuntu上關閉secure boot日誌

由於一些涉及到內核的操做,ubuntu上的nvidia驅動又沒法加載了,安裝時出現須要關閉secure boot提示,執行如下命令:orm

sudo mokutil --disable-validation,執行後須要設置密碼,重啓,黑屏中出現藍色對話框,選第二個選項,更改secure boot設置,此時須要從新輸入剛纔的密碼,重啓後重裝顯卡驅動解決。server

三、ubuntu 16.04安裝N卡驅動,循環登陸問題

中文網上常見的禁用默認驅動(nou什麼什麼)、安裝時加入--no-opengl-files、刪除/etc/X11/xorg.conf、重裝驅動、重配置X(Xorg --configure)就不重複說了。

致使循環登陸的關鍵步驟是,用runfile安裝驅動時沒加--no-opengl-files致使某些opengl系統文件被覆蓋(具體是哪些呢?網上沒提到),並且無法取消,彷佛到了這一步就只剩下重裝一個選項了,其實並非,今天折騰半天終於發現解決方法:https://www.cs.cmu.edu/~help/unix_linux/linux/fix-display-problem-libglx-conflict-ubuntu.html

# service lightdm stop
# dpkg-divert --divert /usr/lib/xorg/modules/extensions/libglx.so.xserver-xorg-core --rename /usr/lib/xorg/modules/extensions/libglx.so
# cd /usr/lib/xorg/modules/extensions/
# ln -s libglx.so.$(nvidia-smi --query-gpu=driver_version --format=csv,noheader) libglx.so
# service lightdm start

我PC是顯示器接核顯輸出,單獨一張GTX 1080,看日誌,症狀徹底符合上述文章,曾經沒加--no-opengl-files參數安裝過runfile驅動,並在下次開機時出現循環登陸問題,嘗試若干方法解決不了後,看到上面的帖子,在從新安裝驅動(仍然是不加--no-opengl-files!這個方法是針對opengl文件被覆蓋以後如何解決的!)以後,執行上述命令,並恢復了xorg.conf文件到最後一次可用的狀態,成功解決。

16.04彷佛是用apt安裝(舊)驅動比較靠譜,在另外一臺16.04 PC也上出現過紫屏、循環登陸等等問題,而其餘系統彷佛不多出現。

相關文章
相關標籤/搜索