2012-02-17 92 views
8

我們正在Linux下構建一個可在特定Ubuntu版本內工作的程序。但是我們想要在Ubuntu 10.04和11.10上運行相同的二進制文件。 完全可以在10.04平臺上構建應用程序。但是當我這樣做時,我依賴於特定的庫版本(例如libboost_thread.so.1.40.0),這些版本在11.10上並不易於使用,因爲它使用了更新的版本。該系統使用QMake構建。爲各種Ubuntu版本編譯C++

我正在尋找一個教程或起點如何解決這些多個Ubuntu平臺的依賴衝突。

+1

很好的問題,你可以靜態鏈接或發佈庫與應用程序,並有一個啓動器/包裝修改LD_LIBRARY_PATH。但我希望有人能提出更好的答案。 – 2012-02-17 13:55:17

+0

如果所有1.x.x都是二進制兼容的,是否可以鏈接到例如libboost_thread.so.1?我不確定這個特定的庫,但有些版本是這樣的。 – rasmus 2012-02-17 14:03:16

+0

@rasmus,Googling我從2009年發現郵件列表中說,「根本沒有二進制兼容性保證,恐怕。」顯然可能有巧合的二進制兼容性,但不能保證,應用程序應該鏈接到確切的版本。 – 2012-02-17 14:07:27

回答

3

如果沒有人覺得在這個擺動,我可能會注入一些東西。

我打算做一些假設。

  • 要分發二進制/閉源應用
  • 你想自己分發

因此排除整個「只是讓發行/用戶構建它自己設置自己」。

看看其他人如何解決類似的問題,我可以看到,通常將共享庫包含在應用程序中,然後使用加載器/包裝器,你想要調用它,在啓動之前修改環境的腳本應用。具體而言,他們修改LD_LIBRARY_PATH以包含應用程序附帶的/ lib文件夾。

該腳本可以像。

#!/bin/sh 

LD_LIBRARY_PATH=./lib ./myAppReal 

這就是我如何解決分發的Qt4應用程序對用戶有發行不超過Qt的3.3.6出貨較新的(2009年......嚴重)。用戶可能也會說用戶是指公司爲開發人員付費的5人,但我們認爲規範失敗並不是要求他們在現代操作系統上跨平臺時更加具體。

現在有人可能會發現大約十幾件事情是錯誤的,但這很好,我可以隨時更新和學習。

編輯:正如JimR所說,這帶來了安全隱患,如果你讓libs文件夾世界變得可寫,某人可能會用它將惡意代碼注入到你的應用程序中。根據您計劃部署的方式,它可能不是真正的問題,但您應該意識到這一點。

+0

你的lib文件夾有多大? – rasmus 2012-02-17 14:28:11

+0

如果使用此方法,請確保仔細考慮添加到LD_LIBRARY_PATH的庫目錄的權限。如果庫可以注入到代碼中,您正在設置安全問題。 – JimR 2012-02-17 15:18:38

+0

@rasmus,我其實不記得,QtGui是什麼? 11MB? – 2012-02-17 16:27:20