0
我的主應用程序由Qt V1編譯(例如4.7.4)。 (需要QtCore 4.7.4) 主應用程序使用的共享庫是由Qt V2編譯的(例如.4.8.2)。 (需要QtCore 4.8.2) 我無法重新編譯庫,我不想重新編譯主應用程序。 是否可以用幾個版本的QtCore,QtGui等來部署我的應用程序?在單個應用程序中使用幾個版本的qt-libs
我的主應用程序由Qt V1編譯(例如4.7.4)。 (需要QtCore 4.7.4) 主應用程序使用的共享庫是由Qt V2編譯的(例如.4.8.2)。 (需要QtCore 4.8.2) 我無法重新編譯庫,我不想重新編譯主應用程序。 是否可以用幾個版本的QtCore,QtGui等來部署我的應用程序?在單個應用程序中使用幾個版本的qt-libs
是否有可能用幾個版本的QtCore,QtGui等部署我的應用程序?
簡答:沒有。
龍答:如果你預先計劃好這一點,你也可以使用該「使用Qt V2共享庫」(讓我們稱INT libFoo.so)間接通過dlopen
和dlsym
。如果您確實這樣做了,那麼您可以dlopen("libFoo.so", RTLD_LOCAL)
,然後來自「Qt V2」的符號對主可執行文件不可見。這是一個非常不穩固的地面,但理論上它應該工作。
我對這方面的細節知之甚少,但無論何時我在OSX中意外地做到這一點,我都會收到很多關於多個Qt庫正在被加載的抱怨,以及在任何時候都會使用哪個庫的問題尚未確定。如果你的代碼庫的一部分調用錯誤的API調用方法,我會認爲它很容易造成問題。爲什麼不能針對可用版本的Qt重新編譯你的應用程序? – jdi
好吧,假設我可以重新編譯我的應用程序,但是如果我想使用幾個不同的Qt-libs版本的第三方庫,我怎麼能把它們放在一個地方? – legotron
把他們放在同一個地方並不是我想的問題。他們可以鏈接到他們需要的庫,但是當他們都加載並使用相同的名稱空間時會發生什麼?那是問題嗎? – jdi