LINUX.ORG.RU

undefined symbol: cgroup_get_cgroup_name

 


0

1

Не могу понять почему либа не работает. Помогите плиз.

$ ./libcgroup.py
...
ImportError: ./_libcgroup.so: undefined symbol: cgroup_get_cgroup_name

$ ldd ./_libcgroup.so 
        linux-vdso.so.1 (0x00007fff9fbcb000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007febd5f1a000)
        libutil.so.1 => /usr/lib/libutil.so.1 (0x00007febd5d17000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007febd5a1d000)
        libpython3.3m.so.1.0 => /usr/lib/libpython3.3m.so.1.0 (0x00007febd55b4000)
        libcgroup.so.1 => /home/sources/libcg/src/.libs/libcgroup.so.1 (0x00007febd5147000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007febd4f2b000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007febd4b83000)
        /usr/lib/ld-linux-x86-64.so.2 (0x0000003edd600000)

$ objdump -t ./_libcgroup.so | grep cgroup_get_cgroup_name
000000000000fa80 l     F .text  00000000000000eb              _wrap_cgroup_get_cgroup_name
0000000000000000         *UND*  0000000000000000              cgroup_get_cgroup_name

$ ldd /home/sources/libcg/src/.libs/libcgroup.so.1
        linux-vdso.so.1 (0x00007fff92a57000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8e61327000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f8e60f80000)
        /usr/lib/ld-linux-x86-64.so.2 (0x0000003edd600000)

$ objdump -t /home/sources/libcg/src/.libs/libcgroup.so.1 | grep cgroup_get_cgroup_name
000000000000e2b0 l     F .text  0000000000000004              cgroup_get_cgroup_name

$ cat ./test.c 
#include <stdlib.h>
#include <libcgroup.h>

int main(void) {
    cgroup_get_cgroup_name(NULL);
    return 0;
}

$ gcc ./test.c -lcgroup
/tmp/ccH0QWWM.o: In function `main':
test.c:(.text+0xa): undefined reference to `cgroup_get_cgroup_name'
collect2: error: ld returned 1 exit status


★★★★★

Ответ на: комментарий от Chumka

Для альтернативно одарённых - как это получилось? Ковыряю Makefile, не вижу ничего подозрительного.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от Chumka

смотрел, ничего даже близко такого нету:

char *cgroup_get_cgroup_name(struct cgroup *cgroup)
{
    if (!cgroup)
        return NULL;

    return cgroup->name;
}

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

символ локальный. при сборке его кто-то делает таким. Если это не в коде, то м.б. это какой-то скрипт линкера или опции компилятора. В libcgroup я вижу скрипт libcgroup.map . Там в явном виде перечисляются глобальные символы. Попробуй туда его впихнуть.

Chumka ★★★
()
Ответ на: комментарий от Chumka

Впихнул, теперь symbol cgroup_get_cgroup_name, version CGROUP_0.32 not defined in file libcgroup.so.1 with link time reference

$ gcc ./test.c -lcgroup
$ ./a.out 
./a.out: relocation error: ./a.out: symbol cgroup_get_cgroup_name, version CGROUP_0.32 not defined in file libcgroup.so.1 with link time reference

Встречался с подобным? Символы запихивал в libcgroup.map в CGROUP_0.32 global.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от Chumka

короче, убрал эти ld-флаги, попробую в саппорт редхата написать. Но, чую, пошлют меня.

true_admin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.