微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

链接到libGL添加对NVidia库的引用

我试图把我的程序链接到libGL.so库,但是我的可执行文件也以libnvidia-tls.so.331.62和libnvidia-glcore.so.331.62的引用结束。 即使NVidia驱动程序将被要求执行我的程序(我使用CUDA),我不希望它依赖于特定版本的库(驱动程序)。

这是一个最小的例子。 资源:

#include <GL/glew.h> int main(int argc,char** argv) { glBegin(GL_LInes); glEnd(); return 0; }

我用以下方法构build程序:

g++ -o main main.cpp -lGL

ldd main输出

_do_fork()如何返回两个不同的PID(一个用于父进程,一个用于subprocess)

Windows C ++进程与线程

无法在gdb中设置断点

如何find代码来炸毁我的应用程序的大小?

无法在Ubuntu上编译C代码。 (#包括错误

linux-vdso.so.1 => (0x00007fff6c3fc000) libGL.so.1 => /usr/lib/nvidia-331/libGL.so.1 (0x00007fd4f37c5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd4f33fd000) libnvidia-tls.so.331.62 => /usr/lib/nvidia-331/tls/libnvidia-tls.so.331.62 (0x00007fd4f31f9000) libnvidia-glcore.so.331.62 => /usr/lib/nvidia-331/libnvidia-glcore.so.331.62 (0x00007fd4f09ea000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fd4f06b5000) libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fd4f04a2000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd4f029e000) /lib64/ld-linux-x86-64.so.2 (0x00007fd4f3b21000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd4eff9a000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fd4efd7b000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fd4efb77000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fd4ef971000)

(注意对libnvidia-tls和libnvidia-glcore的引用)。

如果使用g++ -o main main.cpp /usr/lib/x86_64-linux-gnu/libGL.so编译,则得到相同的结果g++ -o main main.cpp /usr/lib/x86_64-linux-gnu/libGL.so

输出ldd /usr/lib/x86_64-linux-gnu/libGL.so

linux-vdso.so.1 => (0x00007fff4d5d8000) libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007fa63dfd5000) libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa63ddc3000) libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fa63dbbf000) libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fa63d9b9000) libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007fa63d7b7000) libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa63d481000) libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007fa63d26a000) libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007fa63d065000) libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa63ce46000) libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007fa63cc40000) libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fa63ca34000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa63c816000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa63c612000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa63c24a000) libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa63c045000) libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa63be3f000) /lib64/ld-linux-x86-64.so.2 (0x00007fa63e482000)

请注意,这里没有关于nvidia libs的信息。

编辑:输出readelf -d main | grep NEEDED readelf -d main | grep NEEDED :

0x0000000000000001 (NEEDED) Shared library: [libGL.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6]

有任何想法吗 ? 谢谢 !

检查VirtualAddress是否由VirtualAlloc返回

奇怪的改变状态代码

Linux和Windows套接字API

奇怪! linux&windows vsprintf将num浮点到文件

WindowStyle =“None”的最大化窗口不会再次使用键盘SHIFT + WIN + LEFT / RIGHT移动

ldd命令不会做你认为的事情。

ldd命令向您显示程序或库所具有的所有库依赖项,包括直接和间接库。 所以它会显示你直接使用libnvidia-tls.so.331.62和间接使用的libnvidia-tls.so.331.62 。

readelf -d命令将只显示您的程序直接使用的库: libGL.so.1和libc.so.6 。

换句话说,对libnvidia-tls.so.331.62的引用不在你的程序中。 它在你的程序使用的库中。 如果将程序移动到另一个系统,则可能会看到另一个库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐