2015-12-02 63 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直接指向它。

相关问题