如何在glibc中重命名特定函数

问题描述 投票:1回答:1

出于某些原因,我想重命名功能

pthread_mutex_trylock(pthread_mutex_t *mutex);

从glibc到

lab_pthread_mutex_trylock(pthread_mutex_t *mutex);

我尝试添加

weak_alias (__pthread_mutex_trylock, lab_pthread_mutex_trylock)

在文件pthread_mutex_trylock.c中(编辑库的源代码),然后

./configure --prefix=/home/user/glibc
make
make install

之后,我像这样编译程序

  gcc \
  -L "/home/user/glibc/lib" \
  -I "/home/user/glibc/include" \
  -Wl,--rpath="/home/user/glibc/lib" \
  -Wl,--dynamic-linker="/home/user/glibc/lib/ld-linux-x86-64.so.2" \
  -std=c11 \
  -o main.out \
  -v \
  main.c \
  -pthread \
;
ldd ./main.out
./main.out

ldd脚本向我显示了一些功能(来自默认的libc)确实来自我的glibc构建,但是使用lab_pthread_mutex_trylock(pthread_mutex_t * mutex)会导致错误。

glibc的结构非常复杂,我对构建管理的知识很薄弱,因此我觉得我应该做的许多事情都被我错过了。请帮帮我,这对我来说很重要...

gcc错误:

gcc -L "/ home / anahel / glibc-test / lib" -I "/ home / anahel / glibc-test / include" -Wl, - rpath = "/ home / anahel / glibc-test / lib" -Wl , - dynamic-linker = "/ home / anahel / glibc-test / lib / ld-linux-x86-64.so.2" -std = c11 -o main.out main.c -pthread

/ usr / bin / ld: /tmp/ccivqLEz.o: in the "main" function:
main.c :(. text + 0x1b): undefined reference to "lab_pthread_mutex_trylock"
collect2: error: ld returned 1 exit status

我在glibc源代码中所做的步骤:

1)如果添加了文件glibc-2.31 / nptl / pthread_mutex_trylock.c

weak_alias (__pthread_mutex_trylock, lab_pthread_mutex_trylock)

2)在文件glibc-2.31 / sysdeps / nptl / pthread.h中我添加了

extern int lab_pthread_mutex_trylock (pthread_mutex_t *__mutex)
 __THROWNL __nonnull ((1));

之后

/* Try locking a mutex.  */
extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
     __THROWNL __nonnull ((1));
c linux build glibc
1个回答
0
投票

此错误:

undefined reference to "lab_pthread_mutex_trylock"

意味着lab_pthread_mutex_trylock不是来自/home/user/glibc/lib/libpthread.so.0导出。您可以通过以下方式确认此信息:

nm -D /home/user/glibc/lib/libpthread.so.0 | grep lab_pthread_mutex_trylock

((如果我的猜测是正确的,请期待没有输出。)>

[未导出的可能原因:GLIBC的构建过程通过链接程序脚本(通过组合多个Version文件生成)来严格控制要导出的功能以及它们具有的版本。

尤其是,您很可能需要将lab_pthread_mutex_trylock添加到glibc-2.31/nptl/Versions文件。

© www.soinside.com 2019 - 2024. All rights reserved.