2012-05-30 5 views
-1

Я новичок в использовании libtool, просто попробовав его. Следуя различным руководствам и подсказкам, которые я нахожу в Интернете, я запускаю его следующим образом:libtool не создает общую библиотеку

(изменить: обновленный и расширенный вопрос с дополнительной информацией).

$ cat /etc/debian_version 
6.0.6 

$ libtool --version 
ltmain.sh (GNU libtool) 2.2.6b 
Written by Gordon Matzigkeit <[email protected]>, 1996 

$ cat hello.c 
int function(int a) 
{ 
    return a + 1; 
} 

$ libtool --mode=compile gcc -Wall -c hello.c 
libtool: compile: gcc -Wall -c hello.c -fPIC -DPIC -o .libs/hello.o 
libtool: compile: gcc -Wall -c hello.c -o hello.o >/dev/null 2>&1 

$ libtool --mode=link gcc -rpath=/usr/local/lib -o libhello.la hello.lo 
libtool: link: ar cru .libs/libhello.a .libs/hello.o 
libtool: link: ranlib .libs/libhello.a 
libtool: link: (cd ".libs" && rm -f "libhello.la" && ln -s "../libhello.la" "libhello.la") 

Это не производит мой хотел * .so файл, только * .o * и .lo файлы, файл libhello.la и каталог .libs:

$ ls * .libs 
hello.c hello.lo hello.o libhello.la 

.libs: 
hello.o libhello.a libhello.la 

$ nm .libs/libhello.a 
hello.o: 
0000000000000000 T function 

$ cat libhello.la 
# libhello.la - a libtool library file 
# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2 
# 
# Please DO NOT delete this file! 
# It is necessary for linking the library. 

# The name that we can dlopen(3). 
dlname='' 

# Names of this library. 
library_names='' 

# The name of the static archive. 
old_library='libhello.a' 

# Linker flags that can not go in dependency_libs. 
inherited_linker_flags='' 

# Libraries that this one depends upon. 
dependency_libs='' 

# Names of additional weak libraries provided by this library 
weak_library_names='' 

# Version information for libhello. 
current= 
age= 
revision= 

# Is this an already installed library? 
installed=no 

# Should we warn about portability when linking against -modules? 
shouldnotlink=no 

# Files to dlopen/dlpreopen 
dlopen='' 
dlpreopen='' 

# Directory that this library needs to be installed in: 
libdir='' 

Система может построить файл общей библиотеки:

gcc -shared -o libhello.so -fPIC hello.c 

$ file libhello.so 
libhello.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 

Что мне не хватает?

Примечание: я не использую другие вещи для автотюнинга; Я предположил, что libtool может работать сам по себе (большинство ответов, которые, как я вижу, связаны с этой проблемой, упоминают autotools, например, опцию для шага configure. Очевидно, у меня этого нет).

ответ

2

Вы писали:

$ libtool --mode=link gcc -rpath=/usr/local/lib -o libhello.la hello.lo 

По какой-то причине, Libtool не нравится = в опции -rpath. Попробуйте:

$ libtool --mode=link gcc -rpath /usr/local/lib -o libhello.la hello.lo 
+0

Джек, спасибо за предоставление ответа после этого времени. Тем не менее, это все еще не дает мне общую библиотеку. У меня такое чувство, что я недопонимаю libtool, но я не могу понять, что это такое. – Evert

+0

Можете ли вы опубликовать несколько сообщений о том, что происходит, когда вы запускаете эти команды? Он успешно создает общую библиотеку в моей системе. (Ubuntu (Precise) GNU/Linux, libtool 2.4.2). –

+0

Я обновил свой вопрос с дополнительной информацией: в основном именно команды, которые я запускаю и выводя, получаю. Надеюсь, он все еще доступен для чтения. – Evert

-3

Вы должны установить окр для таких:

export CFLAFGS="-shared":${CFLAGS} 

и запустить с опцией:

./configure --enable-shared 

Это позволяет создать общую библиотеку.

+0

Как это ответ на вопрос? Я использую libtool, а не configure. – Evert

-1

Это doesk работа для меня следующая следующих команд:

$ cat hello.c 
#include<stdio.h> 

void main() { 
    printf("Hello world!\n"); 
} 

$ libtool --mode=compile gcc -g -O -c hello.c 
libtool: compile: gcc -g -O -c hello.c -fPIC -DPIC -o .libs/hello.o 
libtool: compile: gcc -g -O -c hello.c -o hello.o >/dev/null 2>&1 

$ libtool --mode=link gcc -g -O -o libhello.la hello.lo -rpath /usr/local/lib -lm 
libtool: link: rm -fr .libs/libhello.a .libs/libhello.la .libs/libhello.lai .libs/libhello.so .libs/libhello.so.0 .libs/libhello.so.0.0.0 
libtool: link: gcc -shared .libs/hello.o -lm -Wl,-soname -Wl,libhello.so.0 -o .libs/libhello.so.0.0.0 
libtool: link: (cd ".libs" && rm -f "libhello.so.0" && ln -s "libhello.so.0.0.0" "libhello.so.0") 
libtool: link: (cd ".libs" && rm -f "libhello.so" && ln -s "libhello.so.0.0.0" "libhello.so") 
libtool: link: ar cru .libs/libhello.a hello.o 
libtool: link: ranlib .libs/libhello.a 
libtool: link: (cd ".libs" && rm -f "libhello.la" && ln -s "../libhello.la" "libhello.la") 

$ ls .libs 
hello.o  libhello.la libhello.so libhello.so.0.0.0 
libhello.a libhello.lai libhello.so.0 

система: CentOS 6,5

версия Libtool: GNU Libtool 2.2.6b

Документация: https://www.gnu.org/software/libtool/manual/libtool.html#Linking-libraries:

+0

Прон, вы прочитали принятый ответ? Я не уверен, что добавляет ваш ответ. – Evert

+0

Да, извините. Я только что прочитал ваш первый комментарий к посту Джека Келли, и я думал, что вы этого не поняли. Хорошо, что это сработало! – pron

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