user-0 提问: 通过ldd命令查看，为什么没有关联到第三方库呢

回复:
user: user-0
content: 还是先结帖了，慢慢弄把。

user: user-1
content: 不调动态库的话，不会有依赖关系        a();         linux-gate.so.1 =>  (0xb77a6000)         libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb778f000)         ./libLGM.so (0xb778c000)         libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e1000)         /lib/ld-linux.so.2 (0xb77a7000)   	//a(); root@ubuntu:/mnt/hgfs/LinuxShare# ldd c         linux-gate.so.1 =>  (0xb77c7000)         libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb77b0000)         libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7606000)         /lib/ld-linux.so.2 (0xb77c8000)

user: user-0
content: 实际调用某个导出的函数，这个没问题，可以调用的。  我进行了。gcc  c.c -lLGM -o c -ldl ，然后用进行了ldd c,但打出的信息确实没有与LGM相关的 正常应该打出来libLGM.so => /usr/lib/libLGM.so (0x00007f6b8fe4e0才对的把  引用 8 楼 zhao4zhong1 的回复:[quote=引用 7 楼 lgmsyy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 谁说ldd可以列出动态加载的.so来着？ 不能吗？我之前写过一个C程序，在这个C程序中调用过第三方提供的动态链接看，然后生成 SO文件。 我通过ldd 我自己的.so，可以观察到我自己的.so与第三方so的关联。  现在我写的C程序直接调用第三方SO，我以为通过ldd是可以关联的[/quote] 也许是因为你只 dlopen，没实际调用某个导出的函数，被操作系统哪个环节优化掉了也未可知。 试试随便加几句调用某个导出函数的代码，再ldd试试。[/quote]

user: user-2
content: 引用 7 楼 lgmsyy 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 谁说ldd可以列出动态加载的.so来着？ 不能吗？我之前写过一个C程序，在这个C程序中调用过第三方提供的动态链接看，然后生成 SO文件。 我通过ldd 我自己的.so，可以观察到我自己的.so与第三方so的关联。  现在我写的C程序直接调用第三方SO，我以为通过ldd是可以关联的[/quote] 也许是因为你只 dlopen，没实际调用某个导出的函数，被操作系统哪个环节优化掉了也未可知。 试试随便加几句调用某个导出函数的代码，再ldd试试。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:谁说ldd可以列出动态加载的.so来着？ 不能吗？我之前写过一个C程序，在这个C程序中调用过第三方提供的动态链接看，然后生成 SO文件。 我通过ldd 我自己的.so，可以观察到我自己的.so与第三方so的关联。  现在我写的C程序直接调用第三方SO，我以为通过ldd是可以关联的

user: user-2
content: 谁说ldd可以列出动态加载的.so来着？

user: user-0
content: 我进行了修正，问题依旧 gcc -fPIC -D_REENTRANT -I/usr/jdk1.8/include -I/usr/jdk1.8/include/linux -c c.c gcc -shared c.o -o libc.so -lLGM  引用 2 楼 neustar1 的回复:另外，你本身没有静态链接，你加上编译选项又有何用呢？你是动态依赖的这个库，所以是不会有关联的。至于你dlopen失败，是库的路径不对。

user: user-0
content: 引用 2 楼 neustar1 的回复:另外，你本身没有静态链接，你加上编译选项又有何用呢？你是动态依赖的这个库，所以是不会有关联的。至于你dlopen失败，是库的路径不对。  我的OPEN是正确的。呵呵，不是失败。

user: user-0
content: 抱歉是我发帖的时候拼写错误：应该是 lLGM，但问题依旧没变。  引用 1 楼 neustar1 的回复:[quote=引用 楼主 lgmsyy 的回复:] 一、c.c文件内容： void *imglib = dlopen("./libLGM.so", RTLD_LAZY);//第三方提供的动态链接库 if(imglib!=NULL){   printf("Open with handle ok !!!\n"); }else{   printf("Open with handle fail !!!\n"); }   二、编译c.c gcc -o c c.c -ldl -g -L. -libLGM  三、ldd c  linux-vdso.so.1 =>  (0x00007fff2f4a5000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8b408cf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8b4050f000) /lib64/ld-linux-x86-64.so.2 (0x00007f8b40ae6000)  为什么没有关联libLGM.so  四、执行./c的时候是打印出Open with handle ok !!!\ 编译选项写错了 -libLGM         ？？？？？[/quote]

user: user-3
content: 另外，你本身没有静态链接，你加上编译选项又有何用呢？你是动态依赖的这个库，所以是不会有关联的。至于你dlopen失败，是库的路径不对。

user: user-3
content: 引用 楼主 lgmsyy 的回复:一、c.c文件内容： void *imglib = dlopen("./libLGM.so", RTLD_LAZY);//第三方提供的动态链接库 if(imglib!=NULL){   printf("Open with handle ok !!!\n"); }else{   printf("Open with handle fail !!!\n"); }   二、编译c.c gcc -o c c.c -ldl -g -L. -libLGM  三、ldd c  linux-vdso.so.1 =>  (0x00007fff2f4a5000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8b408cf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8b4050f000) /lib64/ld-linux-x86-64.so.2 (0x00007f8b40ae6000)  为什么没有关联libLGM.so  四、执行./c的时候是打印出Open with handle ok !!!\ 编译选项写错了 -libLGM         ？？？？？