我想將我的程序鏈接到libGL.so庫,但我的可執行文件也以libnvidia-tls.so.331.62和libnvidia-glcore.so.331.62引用結束。即使NVidia驅動程序將被要求執行我的程序(我使用CUDA),但我不希望它依賴於特定版本的庫(驅動程序)。鏈接到libGL添加引用NVidia庫
這是一個簡單的例子;源:
#include <GL/glew.h>
int main(int argc, char** argv) {
glBegin(GL_LINES);
glEnd();
return 0;
}
我建立程序以:
輸出ldd main
的
g++ -o main main.cpp -lGL
:
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
進行編譯,我會得到相同的結果。
的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庫。
編輯:的readelf -d main | grep NEEDED
輸出:
0x0000000000000001 (NEEDED) Shared library: [libGL.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
任何想法?謝謝 !
'readelf -d t main | grep需要? ( – 2014-08-29 02:20:12
我將它添加到問題:-) – personne3000 2014-08-29 02:23:29