c - 我怎么知道为什么需要 libstdc++

标签 c linker ldd

我正在使用 openGL 编写 C 应用程序。我所有的代码都符合 C99,而且我根本没有使用 C++。我的程序与 openGL 库和 SDL2 链接。

运行 ldd 我得到:

linux-vdso.so.1 (0x00007ffd456e0000)
libSDL2-2.0.so.0 => /lib64/libSDL2-2.0.so.0 (0x00007fccdb862000)
libGLEW.so.1.13 => /lib64/libGLEW.so.1.13 (0x00007fccdb5d7000)
libGLU.so.1 => /lib64/libGLU.so.1 (0x00007fccdb368000)
libGL.so.1 => /lib64/libGL.so.1 (0x00007fccdb0d9000)
libm.so.6 => /lib64/libm.so.6 (0x00007fccdadcf000)
libc.so.6 => /lib64/libc.so.6 (0x00007fccdaa0c000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fccda808000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fccda5ec000)
librt.so.1 => /lib64/librt.so.1 (0x00007fccda3e3000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007fccda0a3000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fccd9d1c000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fccd9b04000)
libGLX.so.0 => /lib64/libGLX.so.0 (0x00007fccd98d4000)
libGLdispatch.so.0 => /lib64/libGLdispatch.so.0 (0x00007fccd95eb000)
/lib64/ld-linux-x86-64.so.2 (0x000055a76893d000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007fccd93c8000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007fccd91b6000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007fccd8fb1000)

如您所见,它链接到 libstdc++,所以我猜另一个库需要它。我如何检查请求此库的调用或获取有关该问题的更多信息? 谢谢。

最佳答案

LD_DEBUG=all <cmd-line> 运行您的应用程序,例如:

LD_DEBUG=all kwin --version |& grep "needed by"

输出:

...
17448:  file=libc.so.6 [0];  needed by kwin [0]
17448:  file=libxcb-image.so.0 [0];  needed by /lib64/libkwin4_effect_builtins.so.1 [0]
...

关于c - 我怎么知道为什么需要 libstdc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509125/

相关文章:

c++ - 无法将 wxWidgets 应用程序与 Code::Blocks/MinGW 链接起来

unix - ldd 在 LD_LIBRARY_PATH 中找不到库

c++ - ldd 未找到 xerces 的共享对象 (.so)

c - 使用时间戳计数器和clock_gettime来缓存未命中

c - C 中默认调度程序的 pthread 良好值设置

c++ - 链接器不包括未引用的数组

linux - 使用 ldd -u,输出是 "Unused direct dependencies:/lib64/libc.so.6",但我真的使用 printf()

c++ - 在SDL中使 Sprite 的背景透明

c - 使用 cygwin 通过 FTDI 使用 ftd2xx.lib 编译 c 应用程序

c++ - 有没有办法忽略未使用的 undefined reference ?