小编Mik*_*ell的帖子

在QMake中设置RPATH顺序

我有一个Linux Qt程序.我希望它优先使用可执行文件目录中的(动态)Qt库(如果存在),否则使用系统的Qt库.RPATH来救援.

我将此行添加到qmake的.pro文件中:

QMAKE_LFLAGS    += '-Wl,-rpath,\'\$$ORIGIN\''
Run Code Online (Sandbox Code Playgroud)

readelf查看生成的可执行文件,我看到:

0x000000000000000f (RPATH)              Library rpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN:/usr/local/Trolltech/Qt-5.2.0/lib]
Run Code Online (Sandbox Code Playgroud)

似乎没错,但ldd显示它使用的是系统版本:

libQt5Core.so.5 => /usr/local/Trolltech/Qt-5.2.0/lib/libQt5Core.so.5 (0x00007f2d2fe09000)
Run Code Online (Sandbox Code Playgroud)

如果我手动编辑qmake生成的Makefile来交换两个rpath的顺序,那么$ ORIGIN出现在/ usr/local/...之后,我得到了正确的行为:

0x000000000000000f (RPATH)              Library rpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]
0x000000000000001d (RUNPATH)            Library runpath: [/usr/local/Trolltech/Qt-5.2.0/lib:$ORIGIN]

libQt5Core.so.5 => ./libQt5Core.so.5 (0x00007fb92aba9000)
Run Code Online (Sandbox Code Playgroud)

我的问题是qmake如何构造最终的LFLAGS变量.我无法弄清楚如何使它在系统库之后添加($ ORIGIN).有任何想法吗?

linux qt qmake rpath

9
推荐指数
2
解决办法
8618
查看次数

QSharedData崩溃

我的Qt 5.2.0应用程序中有一个不常见但相当一致的崩溃,我有一段时间的诊断,但相信与之相关QSharedData.该应用程序是高度多线程的,这可能是问题的一部分.

有问题的课程在这里:

class RouteData : public QSharedData
{
public:
  RouteData() :
      m_destAddress(0),
      m_valid(false),
      m_movingAverage(ROUTE_INITIAL_QUALITY)
  { }
  RouteData(const RouteData &other) :
      QSharedData(other),
      m_destAddress(other.m_destAddress),
      m_addresses(other.m_addresses),
      m_valid(other.m_valid),
      m_movingAverage(other.m_movingAverage),
      m_lastSuccess(other.m_lastSuccess),
      m_lastFailure(other.m_lastFailure)
  { }
  ~RouteData() { }

  quint16           m_destAddress;
  QList<quint16>    m_addresses;
  bool              m_valid;
  double            m_movingAverage;
  QDateTime         m_lastSuccess;
  QDateTime         m_lastFailure;
};

class Route
{
public:
    Route()
    {
        d = new RouteData;
    }
    Route(quint16 destAddress)
    {
        d = new RouteData;
        d->m_destAddress = destAddress;
    }
    Route(const Route &other) : d(other.d) {}

    QString toString() const;

    bool …
Run Code Online (Sandbox Code Playgroud)

c++ qt multithreading qshareddata

2
推荐指数
1
解决办法
1007
查看次数

同时定义数组和符号索引

我正在尝试一种聪明的方法(在C中)创建一个字符串数组,以及数组索引的符号名称(枚举或#define),在一个结构中便于维护.就像是:

const char*strings [] = {M(STR_YES,"yes"),M(STR_NO,"no"),M(STR_MAYBE,"maybe")};

其结果相当于:

const char*strings [] = {"yes","no","maybe"}; 枚举索引{STR_YES,STR_NO,STR_MAYBE}; (或#define STR_YES 0等)

但是我在这种情况下为如何构造M宏绘制了一个空白.

任何聪明的想法?

c syntax

1
推荐指数
1
解决办法
359
查看次数

标签 统计

qt ×2

c ×1

c++ ×1

linux ×1

multithreading ×1

qmake ×1

qshareddata ×1

rpath ×1

syntax ×1