2015-12-02 60 views
0

我有兩個不同的Qt項目,其中一個需要用Qt 4.8編譯,另一個用Qt 5.4編譯。兩者都需要使用根據其版本編譯的庫QDeviceWatcher(即,Qt 5下的應用程序應該爲Qt 5編譯QDeviceWatcher,而使用Qt 4.8的應用程序需要使用Qt 4.8編譯的QDeviceWatcher)。如何在Linux中存儲不同編譯的相同庫版本?

問題是,在Linux下,.so庫文件應該位於同一個「全局」文件夾/usr/local/lib中。由於我正在處理這兩個項目,因此我必須將兩組.so文件放在該文件夾中 - 考慮到它們具有相同的名稱並且最後一個只會覆蓋前一個文件夾,這是不可能的。

至於現在我正在做的是每當我改變要編譯的項目時,我用我需要的編譯來更新庫文件,但這顯然是不可取的。

有什麼辦法可以解決這個問題嗎?

我遇到的唯一兩種方法是創建一個假新版本的庫(目前是2.0.0,所以我可以創建2.0.1版本)並編譯每個lib版本的一個不同的Qt版本(但是當然這會很麻煩,我的意思是,這是一個假的版本!),或者將.so文件放在項目附近的目錄中,這樣文件將被放在那裏,而不是在全局目錄/usr/local/lib中。但是,在我看來,打破了全球所有和新應用程序都可用的圖書館的想法。 Google並沒有幫助我。

+0

你能給出關於導致你的問題的庫文件名的具體信息?在我的機器上,Qt4和Qt5庫有不同的名稱,所以如果我想鏈接到Qt的第4版,我使用'-lQtCore',對於版本5,我使用'-lQt5Core'。請注意,您的'.so'文件應該是指向特定版本的符號鏈接,因此如果您的Qt4和Qt5庫命名相同,則可能只是在編譯/鏈接期間出現問題 - 一旦鏈接,可執行文件應該鏈接到正確的版本。 – nos

+0

@nos似乎你誤解了我的問題:它不在Qt庫之間,而是用不同Qt版本編譯的QDeviceWatcher lib。 – Momergil

+1

那麼QDeviceWatcher'.so'文件應該有一個不同的名稱,這取決於它是否按照許多外部Qt庫的習慣編譯爲Qt 4或Qt5 - 但由於該庫不是以這種方式構建的,因此您需要將它們放在不同的目錄中,一個用於Qt4,用於Qt5並指示應用程序在匹配的目錄中查找庫 - 或者讓某人更新QDeviceWatcher的構建系統以生成不同的庫名稱。 – nos

回答

1

鑑於QDeviceWatcher是一個第三方的應用程序是什麼我會做的是安裝它的/usr/local/lib文件夾之外,併到項目目錄中,而是和更新我的.pro直接指向它。

相關問題