2012-01-18 9 views
23

cho một số tệp nguồn test.cpp Tôi muốn tạo thư viện libtest.so được chia sẻ. Tôi đang cố gắng để làm điều này trong phạm vi của một tập tin automake tuy nhiên tôi không thể có vẻ để có được điều này để làm việc.Cách tạo thư viện được chia sẻ (.so) trong tập lệnh tự động?

Ví dụ dưới g ++ Tôi làm như sau:

g++ -shared -fPIC test.cpp -o libtest.so 

sau đó tôi có thể tạo một tập tin đó sẽ phụ thuộc vào các thư viện chia sẻ như sau:

g++ mytest.cpp libtest.so -o blah 

Tôi đã đọc rằng automake chỉ hỗ trợ việc chia sẻ thư viện thông qua libtool. Tôi đã cố gắng để có được tự động của tôi scriupt để làm việc như sau nhưng nó dường như không bao giờ sản xuất một .so. Gần nhất tôi đã nhận được là cho nó để tạo ra một .la và .o file:

trong configure.ac:

AC_ENABLE_SHARED 
AC_DISABLE_STATIC 
AC_PROG_LIBTOOL(libtool) 

trong Makefile.am

lib_LTLIBRARIES=libtest.la 
libtest_la_SOURCES=test.cpp 
libtest_la_CFLAGS=-fPIC 
libtest_la_CPPFLAGS=-fPIC 
libtest_la_CXXFLAGS=-fPIC 
libtest_la_LDFLAGS= -shared -fPIC 

Có thể một ai đó cho tôi một ví dụ về xây dựng một .so dựa trên những điều trên?

+0

Bạn nên thay thế AC_PROG_LIBTOOL bằng LT_INIT –

+1

Bah ... sau khi viết điều này tôi nhận ra rằng trên thực tế đã tạo tệp .so trong thư mục .libs ẩn của thư mục nguồn của tôi. Hy vọng điều này sẽ giúp người khác tự hỏi về điều này. – skimon

+2

Ai đó có thể đăng các ví dụ hoàn chỉnh của các tệp ở đây? Không phải các tệp nguồn, nhưng là configure.ac và Makefile.am. Tôi không thể thực hiện công việc này bằng cách sử dụng thông tin trong chuỗi này. –

Trả lời

19

Nếu bạn chỉ cần đặt LT_INIT trong configure.ac và trong Makefile.am, làm:

 
lib_LTLIBRARIES = libtest.la 
libtest_la_SOURCES = test.cpp 
libtest_la_LDFLAGS = -version-info 0:0:0 

bạn sẽ nhận được một .so. Bạn không nên chỉ định -fPIC cho CFLAGS, v.v. Các thông số -version-info không cần thiết, nhưng là một ý tưởng hay.

+0

Nếu nó là để thử nghiệm và không được cài đặt, không phải là 'check_LTLIBRARIES'? –

+0

@Jack check_LTLIBRARIES sẽ không tạo .so! Tôi nghĩ rằng "kiểm tra" trong câu hỏi không đề cập đến cùng một loại kiểm tra như tiền tố check_ tiền tố ngụ ý. –