什么C库提供了memcpy?

What C library provides memcpy?

如何找出是哪个 gcc 库为 memcpy 提供了符号?

memcpy是头文件提供的,不知道是哪个库提供的符号。

$ objdump -ax libboost_filesystem.so | grep memcpy
0000000000000000       F *UND*  0000000000000000              wmemcpy@@GLIBC_2.2.5
0000000000000000       F *UND*  0000000000000000              memcpy@@GLIBC_2.14

很明显,这个共享对象需要找一个memcpy的实现。

我该如何获取这些信息? 如果能查询编译器就好了

what gcc library provides the symbol for memcpy?

C标准库提供memcpy.

some popular implementations of C standard library,在 Linux 上最显着的是 glibc(好吧,Alpine Linux 上有 musl)。

How do I go about getting this information?

您可以采取一些方法。您可以 运行 某些内容并查看它链接到 . You can index all libraries on your system (see man ld.so and /etc/ld.so.conf) and index all symbols in those libraries and query the symbol (this my script does that 的位置。然后你可以查询你的系统包管理器,找出共享库属于哪个包。

memcpy 在 C 标准和 POSIX 标准以及一些其他操作系统规范中指定。因此,它是由C标准and/or提供的操作系统库实现。

GNU 系统上的默认标准库是 GNU C 库又名 glibc。

How do I go about getting this information?

搜索引擎非常适合获取一般信息,包括这个。搜索 memcpy 应该可以找到有关它是什么(标准库函数)的信息,搜索系统文档应该可以找到有关其标准库实现的信息。

你演示的objdump命令好像也给了你答案。

I'm trying to understand what is the file name in my system.

没有适用于所有系统的标准方法。但我们假设您的操作系统是 Linux。 manual 表示

The pathname /lib/libc.so.6 (or something similar) is normally a symbolic link that points to the location of the glibc library, and executing this pathname will cause glibc to display various information about the version installed on your system.

您可以使用ldconfig -p | grep libc.so找到精确的路径。

$ nm -D --with-symbol-versions /lib/x86_64-linux-gnu/libc.so.6 | grep memcpy
000000000009f150 i memcpy@@GLIBC_2.14
00000000000bb4d0 T memcpy@GLIBC_2.2.5
0000000000131a50 i __memcpy_chk@@GLIBC_2.3.4
00000000000bd510 W wmemcpy@@GLIBC_2.2.5
00000000001334a0 T __wmemcpy_chk@@GLIBC_2.4