2013-04-11 2 views
1

Я хочу внести некоторые изменения в библиотеку glibc. Первый шаг - использовать конкретную версию при компиляции программы. Я под убунту 12.10 и мои каталоги:Использование другой версии glibc?

/mydirectory/glibc-2.17 (where I have extracted the last version from the website) 
/mydirectory/glibc-2.17-build (where I have executed the configure and make command) 
/mydirectory/test/helloworld.c (where I have my helloworld program) 

helloworld.c является следующее:

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    char glibc[256] = "xxxx"; /* How to detect the glibc version here ? */ 
    printf("hello, world\n"); 
    printf("glibc version = %s\n", glibc); 
    return 0; 
} 

Во-первых, как я могу напечатать версию glibc? (Я думаю, что для этого есть макро/константа в glibc).

Во-вторых, какую командную строку я должен использовать для компиляции моего файла helloworld.c для использования glibc, который находится в /mydirectory/glibc-2.17-build?

+0

Параметр '-L' для' ld' добавляет каталог в список поиска библиотеки. – Barmar

+0

Хм ... не использовал бы какой-либо другой glibc, чем система, один результат в проблемах, когда исполняемый файл связывает некоторую * другую * библиотеку (которая, в свою очередь, была связана с системным libc)? – DevSolar

ответ

1

Использовать -L pathname, чтобы явно указать путь к ld, как сказал Бармар в комментарии.
Рекомендуется использовать статическое связывание -static или могут возникнуть проблемы во время выполнения. Я думаю.

Фактически мое собственное решение этой проблемы было бы: скомпилировать и связать исходный код как обычно, и вызвать с LD_PRELOAD, установленным для указанной вами версии общих объектов.
См. http://linux.die.net/man/8/ld.so

Смежные вопросы