Tôi đang xây dựng thư viện cờ dòng lệnh google-gflags cho C++ trên Mac OS X (10.7.1). Quá trình xây dựng là như vậy:Làm cách nào để sửa đổi tên cài đặt của .dylib tại thời gian xây dựng
$ ./configure --prefix=output
$ make
$ make install
Tôi muốn thay đổi tên cài đặt của thư viện được tạo lúc xây dựng và không sử dụng install_name_tool
sau đó.
Theo mặc định, install name của thư viện được chia sẻ tạo ra, libgflags.dylib
, là con đường đầu ra:
$ otool -L ./output/libgflags.dylib
$ ./output/libgflags.dylib:
/tmp/gflags-1.5/output/lib/libgflags.0.dylib (compatibility version 2.0.0, current version 2.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
Các trang người đàn ông cho ld(1)
có một lựa chọn -install_name
mà có thể được sử dụng để thay đổi các cài đặt tên của một động thư viện tại thời gian liên kết.
Ví dụ, với một chương trình giả:
$ g++ -dynamiclib temp.cc -install_name /tmp/temp.dylib -o temp.dylib
$ otool -L temp.dylib
temp.dylib:
/tmp/temp.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
Nhưng, tôi không thể sử dụng tùy chọn này dòng lệnh với ./configure
kịch bản. Tôi đã thử bằng tay thiết lập các biến CFLAGS
, nhưng có kết quả trong một lỗi:
$ CFLAGS="-install_name /tmp/desired/location/libgflags.dylib" ./configure
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/Users/vibhav/Code/install_name_test/gflags-1.5':
configure: error: C compiler cannot create executables
Vì vậy, là nó có thể cho tôi để thay đổi tên cài đặt của .dylib tạo ra bởi configure
và make
mà không sử dụng install_name_tool
?
Tôi không hiểu bạn đang cố gắng làm gì. Tại sao bạn không thể chạy './configure --prefix/tmp/mong muốn/location'? – adl
Đó là một câu hỏi hợp lệ. Tôi không thể đặt '--prefix' thành vị trí đó vì nhiều lý do, kể cả vị trí xây dựng của tôi khác với vị trí" cài đặt "của ứng dụng của tôi. Tôi chỉ muốn chuyển cờ liên kết thích hợp trong khi sử dụng 'configure'. – v8891
Kịch bản của bạn vẫn chưa rõ ràng với tôi. Bạn có thể giải thích cách chuẩn './configure --prefix/somewhere && make && make install' sai cho thiết lập của bạn không? Tại sao vị trí xây dựng của bạn lại quan trọng? (Bạn nên sử dụng một tiền tố tuyệt đối, tất nhiên.) Bạn đang cố gắng liên kết đến 'libglflags' mà không cần cài đặt nó? (Trong trường hợp đó, bạn nên sử dụng 'libtool' để liên kết ứng dụng của bạn với' libflag.la' và để libtool làm phép thuật của nó để liên kết với một thư viện không được cài đặt.) Bạn có muốn cài đặt thư viện vào một vị trí tạm thời trước khi nó được sao chép vào vị trí cuối cùng của nó? (Đó là một công việc cho biến DESTDIR.) – adl