2010-03-23 39 views
10

Tôi muốn bao gồm libQtGui.so.4 libQtNetwork.so.4 và libQtCore.so.4 trong cùng thư mục với nơi ứng dụng của tôi nằm. Làm thế nào tôi sẽ làm cho Qt hiểu điều này? mục đích y là có ứng dụng độc lập sử dụng thư viện được chia sẻLàm cách nào tôi có thể đặt nơi ứng dụng Qt tìm thấy mô-đun Qt?

+0

bạn cũng có thể quyết định liên kết tĩnh với các thư viện Qt, theo cách đó bạn sẽ không phụ thuộc vào phiên bản Qt cục bộ được cài đặt (đây là cách Opera được sử dụng để làm điều đó dưới Linux) – sisis

+0

triển khai trên là fontconfig là lỗi (red Hat 5.3 sử dụng fontconfig 2.4.1) –

+0

khi tôi cố gắng xây dựng tĩnh có một tham chiếu không xác định để FcTypeFreeQueryFace và khi tôi cố gắng để cập nhật fontconfig nó nói với tôi rằng fontconfig được cập nhật ... ..bummer .. sau đó tôi phải tìm một cách để sửa đổi các tập tin Qt để xây dựng với một phiên bản của fontconfig mà tôi cung cấp. Tôi có thể xây dựng ứng dụng của mình theo kiểu động với một phông chữ mà tôi cung cấp nhưng không phải là tĩnh –

Trả lời

8

Đặt biến môi trường LD_LIBRARY_PATH là một tùy chọn. Ví dụ:

export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH 

Một tùy chọn khác là đặt RPATH của ứng dụng Qt trong khi liên kết. Đặt RPATH thành giá trị "$ ORIGIN" sẽ làm cho trình liên kết động nhìn vào cùng thư mục với ứng dụng Qt của bạn khi chạy. Ví dụ, nếu sử dụng qmake, hãy thêm đoạn sau vào tập tin dự án của bạn:

unix:!mac{ 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs 
    QMAKE_RPATH= 
} 

này sẽ thiết lập rPath thành "$ XỨ: $ ORIGIN/lib: $ ORIGIN/libs", có nghĩa là mối liên kết động sẽ đầu tiên nhìn vào vị trí của ứng dụng Qt của bạn, sau đó trong thư mục con lib tại vị trí của nó, sau đó trong thư mục con libs tại vị trí của nó và cuối cùng là ở bất kỳ vị trí được xác định hệ thống nào.

+0

dường như không hoạt động. –

+0

Đây là đầu ra biên dịch: "g ++: tùy chọn không được công nhận" -wl, - rpath = $ ORIGIN "" "g ++: tùy chọn không được nhận dạng '-wl, - rpath = $ ORIGIN/lib'" "g ++: tuỳ chọn không được công nhận '- wl, - rpath = $ ORIGIN/libs '" –

+0

loại bỏ những thủ công trong Makefile trực tiếp, nhấn xây dựng tất cả một lần nữa sau đó nó được thông qua ... bây giờ để dùng thử. –

0

UNIX/Linux sẽ xem xét LD_LIBRARY_PATH (nếu được đặt) trước khi tìm trong libs hệ thống chuẩn. Vì vậy, nếu bạn thiết lập điều đó, bạn thực sự có thể ghi đè lên. Cũng giống như thiết lập PATH trên Windows. Hiệu ứng tương tự. Các vấn đề đặt hàng.

Bạn có thể thêm ./ hoặc. cũng như LD_LIBRARY_PATH.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 
+0

Tôi đã thử nó và nó không hoạt động. Tôi đã đi vào dự án và thay đổi LD_LIBRARY_PATH thành. nhưng không có gì thay đổi khi tôi quay trở lại terminal và gõ ldd ./MyApp ... Tôi đang xây dựng từ GUI ... tôi có nên thử từ dòng lệnh không? –

0

LD_LIBRARY_PATHQMAKE_RPATH chưa bao giờ làm việc cho tôi. Thay vào đó, tôi đặt QMAKE_RPATHDIR trong tệp .pro của mình. Ví dụ sau khi đã xây dựng và cài đặt (make install) Qt, nó đã được đặt trong /usr/local/Trolltech/Qt-4.8.5/lib/. Sau đó tôi viết thông tin sau vào tệp .pro của mình:

QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/ 

Lưu ý 1: Đường dẫn tương đối dường như không hoạt động. Ưu tiên đường dẫn tuyệt đối.

Lưu ý 2: Khi bạn sau đó make, bạn có thể thấy rằng các tùy chọn sau đây được trao cho các mối liên kết: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/

Lưu ý 3: Để chắc chắn rằng các liên kết nhị phân tự động vào thư viện đúng, bạn có thể hiển thị phiên bản Qt trong thời gian chạy được phân phối bởi qVersion().

Các vấn đề liên quan