По некоторым причинам я sh хочу создать псевдоним для функции
pthread_mutex_trylock(pthread_mutex_t *mutex);
из glib c для псевдонима с именем
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 показывает, что некоторые функции (из библиотеки по умолчанию c) действительно из моей сборки glib c, но использование lab_pthread_mutex_trylock (pthread_mutex_t * mutex) вызывает ошибку.
glib * У 1040 * очень сложная структура, и у меня довольно слабые знания об управлении сборкой, поэтому я чувствую, что многие вещи, которые я должен был сделать, были упущены мной. Пожалуйста, помогите мне, это очень важно для меня ...
Ошибка от g cc:
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
Шаги, которые я делал в glib c sources:
1) Если файл glib c -2.31 / nptl / pthread_mutex_trylock. c Я добавил
weak_alias (__pthread_mutex_trylock, lab_pthread_mutex_trylock)
2) В файл glib c -2.31 / sysdeps / nptl / pthread.h I добавлено
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));