小编Vel*_*kan的帖子

CMake将共享库链接到静态库

我正在将AutoTools项目移植到CMake。

AutoTools的作用:

  • 建立一些静态库
  • 建立一些共享库并将静态库链接到共享库
  • 构建可执行文件,将其链接到共享库

我已经设法使用CMake进行了以下操作:

  • 建立一些静态库- add_library(staticfoo <src>)
  • 建立一些共享库- add_library(sharedfoo SHARED <src>)并将它们链接-target_link_libraries(sharedfoo staticfoo)
  • 构建可执行文件,将其链接到共享库- target_link_libraries(exe sharedfoo),但这也再次将静态库拖入其中。

因此,可执行文件的结果链接命令除了共享外还具有静态库。这与AutoTools项目生成的命令不对应。

我已经尝试过了target_link_libraries(sharedfoo PRIVATE staticfoo),但这并不能将符号从静态库获取到共享库的接口中。

如何获得没有“传递”行为的符号?

(以与平台无关的方式)

c c++ cmake

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

通过SDL渲染QtQuick GUI

尝试将QML用户界面呈现到SDL窗口中.

有一个SDL 1.2游戏通过SDL_SetVideoMode带SDL_OPENGLBLIT标志创建一个OpenGL上下文.

我们的想法是获取OpenGL上下文句柄并将其传递给将在场景上绘制GUI的QQuickRenderControl.

获取本机上下文(X11的示例):

GLXContext currentContext;
SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
if (SDL_GetWMInfo(&wmInfo))
{
    Display *display = wmInfo.info.x11.gfxdisplay;
    currentContext = glXGetCurrentContext();
    assert(currentContext);
}
Run Code Online (Sandbox Code Playgroud)

在Qt中采用它:

QOpenGLContext *ctx = new QOpenGLContext;
ctx->setNativeHandle(QVariant::fromValue<QGLXNativeContext>(
    QGLXNativeContext(currentContext, wmInfo.info.x11.display, wmInfo.info.x11.window)
));
Run Code Online (Sandbox Code Playgroud)

并创建QQuickRenderControl:

QQuickRenderControl *renderControl = new QQuickRenderControl;
renderControl->initialize(ctx);
Run Code Online (Sandbox Code Playgroud)

但是如果没有QWindow,QQuickRenderControl就无法启动:

QQuickRenderControl::initialize called with no associated window
Run Code Online (Sandbox Code Playgroud)

还ctx->isValid()和ctx->makeCurrent()返回false.

如何使它工作?

qt sdl qt-quick

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

没有音频设备的原生 WebRTC

我有一个音频处理服务器,我希望能够通过 WebRTC 连接到它。

谷歌的本机库似乎适合于此(从查看对等连接示例):https ://webrtc.org/native-code/native-apis/

但该库过于依赖音频设备:它在幕后打开它们。我已设法通过将自己的音频附加AudioTrackSinkInterface到流中来获取传入音频,但尚未找到如何将音频注入出站流中。无论如何,这些黑客行为都无法避免打开设备。

怎样做才能干干净净呢?

c++ webrtc

5
推荐指数
0
解决办法
646
查看次数

如何在docker中列出可用的存储驱动程序?

信息显示:

Storage Driver: vfs
Run Code Online (Sandbox Code Playgroud)

Kubernetes 不喜欢它,kubeadm init打印:

unsupported graph driver: vfs
Run Code Online (Sandbox Code Playgroud)

如何列出可用的驱动程序?

docker kubernetes ubuntu-16.04

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

如何在 gn 中设置全局编译标志,使其出现在 ninja 文件中?

如何添加类似的事情-O2或定制-DSOMETHING,使他们出现在 cflags与defines该* .ninja的文件?

重新编译这个:

https://webrtc.org/native-code/development/

它改变了构建系统。现在第一个构建步骤是:

gn gen out/Default --args='is_debug=false'
Run Code Online (Sandbox Code Playgroud)

建立在 Ubuntu 上,以自己为目标。

在哪里可以将它添加到 *.gn 或 *.gni 文件中?

google-chrome chromium webrtc ninja gn

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

如何将数组传递给 std::make_tuple?

这该怎么做:

#include <tuple>

std::tuple<double, int[2]> f()
{
    return std::make_tuple(0., {1, 2});
}

int main()
{
    f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无法将“std::make_tuple<{}>()”从“std::tuple<>”转换为“std::tuple”

编译器不知道该怎么做吗?

arrays tuples initializer-list c++11

4
推荐指数
2
解决办法
1530
查看次数

将Q_GADGET作为信号参数从C++传递到QML

无法在QML代码中获取C++对象的属性.对象作为参数传递给信号.

预期在QML,属性text的的Record对象可以被提取.价值应该是abc.QML将对象视为QVariant(Record),并将其属性text视为undefined.

Record是类似值的类型QPoint,所以它使用Q_GADGET声明.

HPP:

#ifndef LISTENP_HPP_
#define LISTENP_HPP_

#include <QObject>

#include "Record.hpp"

class ListenP: public QObject
{
Q_OBJECT

public:
    ListenP();
    virtual ~ListenP();

    void emitGotRecord();

signals:
    void gotRecord(Record r);
};

#endif /* LISTENP_HPP_ */
Run Code Online (Sandbox Code Playgroud)

CPP:

#include "ListenP.hpp"

ListenP::ListenP() :
        QObject()
{
}

ListenP::~ListenP()
{
}

void ListenP::emitGotRecord()
{
    emit gotRecord(Record("abc"));
}
Run Code Online (Sandbox Code Playgroud)

hpp for Record:

#ifndef RECORD_HPP_
#define RECORD_HPP_

#include <QObject>
#include <QMetaType>

class Record …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquick2 qgadget

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

从元组中提取多个类型

这应该是显而易见的,是否有一些简短的语法来获得一个子组?

像这样的东西:

std::tuple<std::string, double, int> myTuple;
std::tuple<std::string, int> subTuple = std::get<std::string, int>(myTuple);
Run Code Online (Sandbox Code Playgroud)

c++ tuples c++11

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

如何比较Go模板中的字符串?

我想显示.metadata.labels.app设置为"myapp"值的条目。

命令:

kubectl get pods -o go-template --template="{{range .items}}{{if eq .metadata.labels.app "myapp"}}{{.metadata.name}} {{end}}{{end}}"
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误:

输出:1:未定义函数“ myapp”

结构如下所示:

- apiVersion: v1
  kind: Pod
  metadata:
    creationTimestamp: 2017-09-15T08:18:26Z
    generateName: myapp-2830765207-
    labels:
      app: myapp
      pod-template-hash: "2830765207"
    name: myapp-2830765207-dh359
    namespace: default
Run Code Online (Sandbox Code Playgroud)

go go-templates kubernetes

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