• 近期遇到问题总结


    1、Linux下编译动态库时,去除不希望显示的符号(2017年9月23日)

    编译出so之后,用nm -D xx.so能看到库中所有符号。

    为去除不希望看到的符号,在编译so时,使用gcc参数-fvisibility=hidden,以设置默认隐藏所有符号,对于想显示的符号,函数定义前加入__attribute__((visibility ("default")))即可。

    如果编译so时,用到了静态库,则静态库中所有符号也会显示在内,而上面这种设置方式只对本次编译生成的.o文件有效,屏蔽静态库的符号,可使用参数:-Wl,--exclude-libs,ALL,还有至少两种方法,一是手动删除特定的符号,二是使用version script手动控制导出符号,参见下面链接。

    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-object

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

     2、ubuntu上关闭secure boot

    因为一些涉及到内核的操作,ubuntu上的nvidia驱动又无法加载了,安装时出现需要关闭secure boot提示,执行以下命令:

    sudo mokutil --disable-validation,执行后需要设置密码,重启,黑屏中出现蓝色对话框,选第二个选项,更改secure boot设置,此时需要重新输入刚才的密码,重启后重装显卡驱动解决。

    3、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也上出现过紫屏、循环登录等等问题,而其他系统似乎很少出现。

  • 相关阅读:
    Go基础---->go的基础学习(三)
    java基础---->Java关于复制的使用(一)
    java基础---->Reference的使用(一)
    java基础---->Java中枚举的使用(一)
    Go基础---->go的基础学习(一)
    java基础---->java中变参函数的使用
    java框架---->RxJava的使用(一)
    android基础---->AccessibilityService的简单使用(一)
    spring基础---->spring自定义标签(一)
    十分钟让你明白Objective-C的语法(和Java、C++的对比)
  • 原文地址:https://www.cnblogs.com/shenck/p/7582684.html
Copyright © 2020-2023  润新知