小编dra*_*hnr的帖子

Makefile问题:扫描.c文件的目录树的智能方法

我正在做一个快速增长的项目,保持目标文件的日期是没有选择的.wildcard命令之外的问题介于"我不想要递归的makefile"和"我不希望它手动列出"之间.这些对象应该进入一个单独的目录,该目录已经可以使用.注:我不是用的makefile,我知道的基本知识,但一切都超出了......

所以我的问题是: 如何以递归方式扫描src文件夹并以智能方式执行此操作?

我已经用多个SRC变量做了这个但是这很难看,并且整个makefile与越来越多的目录混乱.

我目前使用的是:

OS = Linux

VERSION = 0.0.1
CC      = /usr/bin/gcc
CFLAGS  = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\"
LDFLAGS = -lm `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`

BUILDDIR = build
SOURCEDIR = src
HEADERDIR = src

SOURCES = $(wildcard $(SOURCEDIR)/*.c)
OBJECTS = $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES))

NAME = cinnamon
BINARY = cinnamon.bin

ECHO = echo
RM = rm -rf
MKDIR = mkdir
INSTALL = install

.PHONY: all clean setup

all: $(BINARY)


$(BINARY): $(BUILDDIR)/$(OBJECTS)
    $(CC) $(CFLAGS) $(LDFLAGS) …
Run Code Online (Sandbox Code Playgroud)

tree makefile

54
推荐指数
3
解决办法
7万
查看次数

需要OpenGL GPU内存清理吗?

我是否必须通过glDelete*函数手动清理所有DisplayLists,Textures,(Geometry-)着色器等,或者当我的程序退出/崩溃时GPU mem是否会自动释放?

注意:GPU mem是指专用显卡上的专用内存,而不是CPU内存.

opengl memory-leaks memory-management gpu

7
推荐指数
2
解决办法
8233
查看次数

OpenGL半透明纹理超过其他纹理

我有一个2 png图像,在Qt/C++ 2D OpenGL应用程序中用作纹理.第一个被用作某种"中间"地面,第二个用作"对象"被渲染为"ontop"(注意:它们都具有相同的z值atm,我得到所需的行为将其呈现在定义的顺序)."物体" - 纹理部分是半透明的."中间地带"纹理大多是实心的.问题是,我的"对象"纹理的半透明部分是固体背景颜色而不是"中间地板"纹理.

任何提示如何实现这一目标?

以下OpenGL falgs用于我的纹理渲染

glEnable (GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

编辑:

更多代码:

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1f);

glEnable(GL_TEXTURE_2D);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBindTexture(GL_TEXTURE_2D, c->_texture);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

glBegin(GL_QUADS);
{
    glTexCoord2i(0,0);
    glVertex2i(-128,-128);

    glTexCoord2i(0,1);
    glVertex2i(-128,128);

    glTexCoord2i(1,1);
    glVertex2i(128,128);

    glTexCoord2i(1,0);
    glVertex2i(128,-128);

}
glEnd();

glDisable(GL_TEXTURE_2D);

glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);
Run Code Online (Sandbox Code Playgroud)

编辑:我如何加载我的纹理,据我所知它加载它 alpha通道

QImage img("./images/dummycar.png","PNG");
QImage t(QGLWidget::convertToGLFormat(img));
glGenTextures(1, &_texture);
glBindTexture(GL_TEXTURE_2D, _texture);
glTexImage2D( GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); …
Run Code Online (Sandbox Code Playgroud)

opengl textures transparent translucency

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

如何配置openssl的默认后端引擎?

我编译了OpenSSL并支持cryptodev(即硬件加速),但不幸的是默认引擎仍然是软件.

time openssl speed -evp aes-128-cbc -engine cryptodev
Run Code Online (Sandbox Code Playgroud)

产生"正确"的数字,但ProFTP(也使用OpenSSL)在使用时不会显示任何性能提升(FTP安全,FTPS,无论你怎么称呼它).

该引擎支持AES-128,AES-192,RC4,SHA-1,DES,Triple-DES等.

/etc/ssl/openssl.cnf看起来像这样:

#...
# a lot of generic stuff...
#...

[engine_section]
cryptodev = cryptodev_section

[cryptodev_section]
default_algorithms = ALL
Run Code Online (Sandbox Code Playgroud)

我查看了代码,但他们使用定义,重新定义,取消定义,结合原型使得跟踪变得痛苦......

如果以上是正确的,当用户创建CTX_SSL或类似的时,会调用什么例程来初始化引擎?

openssl cryptography backend

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

Qt无证方法setSharable

我迷迷糊糊关于这似乎是存在于所有数据的方法对象,如QList,QQueue,QHash...

我甚至调查到目前为止我可以看到它的源代码,这是

inline void setSharable(bool sharable) {
    if (!sharable) detach(); d->sharable = sharable;
}
Run Code Online (Sandbox Code Playgroud)

qlist.h中(第117行).

但是,它有什么样的影响上QList,QQueue,QHash...?它是否与线程有关(听起来合理)?

感谢您的回答,如果您有实际知识,请回答.

c++ qt copy-on-write qlist

6
推荐指数
2
解决办法
911
查看次数

虚方法和模板类

我遇到了一个问题,我认为这是一个非常具体的问题.

我有2个班,一个B aseclass和一个D erived类(来自B aseclass). 是一个模板类(或类模板),并具有一个纯虚拟方法 virtual void work(const T &dummy) = 0;d erived类应该重新实现这一点,但由于d是衍生自 而非d是另一个模板类时,编译器吐出在我,虚函数和模板不能立即工作.

任何想法如何实现我想要的?

我感谢任何想法和想法,特别是如果你已经解决了这个问题

这个类也是固定的,我不能在不破坏现有代码库的情况下编辑它

template <typename T>
class B {
public:
...
virtual void work(const T &dummy) = 0;
..
};
Run Code Online (Sandbox Code Playgroud)

以int*为例

class D : public B<int*>{
...
virtual void work(const int* &dummy){ /* put work code here */ }
..
};
Run Code Online (Sandbox Code Playgroud)

编辑:编译器告诉我,那void B<T>::work(const T&) [with T = int*]纯虚d

c++ virtual templates

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

Gtk +和OpenGL绑定

简单和简短:GTK +最先进的OpenGL绑定是什么? 我更喜欢一个允许我使用类似于QGLWidget的小部件.

注意:我偶然发现了gtkglext,gtkglarea和clutter.我读了前两个有缺点/严重问题.

c gtk opengl

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

C语言中的面向对象编程

可能重复:
你能用C编写面向对象的代码吗?

嗨,有人能指点我一个教程解释我如何在ANSI C中实现OOP概念:

  • 虚函数
  • 遗产
  • 最佳实践

一本关于OOP编程ANSI C的书也很棒.

c oop c89

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

如何处理缺少的libgcc_s.a

交叉使用外部工具链别名编译库的buildroot code sourcery lite 2011导致

output/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

由于明显缺失 libgcc_s.a

# find . -iname "libgcc*"        
./output/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libgcc_s.so
./output/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/armv4t/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/armv4t/lib/libgcc_s.so
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/lib/libgcc_s.so
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/armv4t/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/armv4t/libgcc_eh.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/plugin/libgcc
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/thumb2/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/thumb2/libgcc_eh.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/libgcc_eh.a
Run Code Online (Sandbox Code Playgroud)

有没有办法绕过这个问题,但仍然静态链接?是否有CLFAGS或LDFLAGS选项可以静态链接所有内容除外libgcc_s

到目前为止尝试的东西(除了阅读适用的部分ldgcc手册页):

CFLAGS="-static -static-libgcc"
CFLAGS="-static -shared-libgcc"
CFLAGS="-static -static-libgcc -Wl,-Bstatic"
CFLAGS="-static -shared-libgcc -Wl,-Bstatic"
Run Code Online (Sandbox Code Playgroud)

添加后-Wl,-lgcc_s,-Bstatic我得到了大量的未定义/未知符号...(-Bshared不是有效的选项说ld)

/home/bernhard/buildroot-2013.08/output/target/usr/lib/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `_g_local_file_info_get':
glocalfileinfo.c:(.text+0x2d90): warning: Using 'getgrgid' in statically linked applications requires at runtime the shared libraries from …
Run Code Online (Sandbox Code Playgroud)

c flags compilation buildroot libgcc

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

在Qt中将QSqlRecord提交到MySQL数据库

我想访问一个MySQL数据库,我想在我的Qt/C++程序中读取+写入数据到数据库.对于读写过程,我尝试使用QSqlTableModel,QSqlTableRcord和QSqlDatabase,因为这是一个非常愉快的方法,没有太多的SQL命令,我不喜欢这个或其他原因(处理自己).我有一个类似的方法已经运行(所以数据库已经运行)但它一直混乱.所以简单的问题是我在这几行示例代码中做错了什么:使用QT 4.5.x测试数据库有3列:float x,float y,blob img

int main(){
QImage img("./some_image.png");
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("test");
db.setPort(3306);
db.setUserName("root");
db.setPassword("xxxxxxx");
if (!db.open() )
    qDebug("Mising db / unable to open");
else {
    QSqlTableModel model;
    qDebug() << "tables::" <<db.tables(); //so I see the table exists and gets detected
    model.setTable("test_table");

    QSqlRecord rec;
    rec.setValue(0,1.0f);
    rec.setValue(1,2.0f);

    QByteArray ba;
    QBuffer buffer(&ba);
    buffer.open(QIODevice::WriteOnly);
    img.save(&buffer, "PNG");
    rec.setValue(2,ba);

    model.insertRecord(0,rec);
    qDebug() << model.lastError().text();
    if (!model.submitAll())
        qDebug() << "Submit all did not work";
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

对于任何帮助,我已经从Qt文档的一端运行到另一端,但没有找到解决方案,我已经浪费了5个小时这样做,所以我感谢任何提示(除非你建议完全不同) .

c++ mysql sql qt

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

QThread,thread,rly?

一段时间以来,我现在非常繁琐,以便在一个响应良好的UI后面运行一个大量的时间/ cputime排放操作.不幸的是,我似乎无法让它运行,"我认为"问题是插槽没有在QThread工作器中处理,而是GUI线程.尽管如此,ThreadID与预期不同.

我已经阅读了这篇http://doc.trolltech.com/4.6/threads-qobject.html 并使用了googel和SO搜索,但没有任何真正帮助我的东西.可能是它固执的东西,我只是看不到.

下面是我的缩减代码(注意:在与二进制文件相同的文件夹中需要一个名为"dummy1024x1024.png"的png):

main.cpp中

#include <QtGui>
#include "dummy.h"

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    Dummy d(NULL);
    d.show();
    qDebug() << "App thread " <<  QThread::currentThreadId();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

dummy.h

#ifndef DUMMY_H
#define DUMMY_H

#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>

#include "workerthread.h"

class Dummy : public QWidget
{
Q_OBJECT
public:
    explicit Dummy(QWidget *parent = 0);
    virtual ~Dummy();
private:
    QVBoxLayout* m_layout;
    QPushButton* m_dummy[3];
    QPushButton* m_shootcalc;
    WorkerThread* m_work;
signals:

public slots:

};

#endif // DUMMY_H
Run Code Online (Sandbox Code Playgroud)

dummy.cpp

#include "dummy.h" …
Run Code Online (Sandbox Code Playgroud)

qt multithreading qt4

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

gtk _get_type()函数实现

我刚刚开始学习GTK。我正在查看gtk + 3.0.0的源代码,发现某些gtk对象类型的_get_type()方法的实现,但有些则没有此方法的实现,例如GtkRange。有什么理由吗?据《 GObject参考手册》了解,_get_type()方法在类型系统中注册对象类型。

gtk gobject glib gtk3

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

使用 Valgrind 追踪内存泄漏

根据 Valgrind 的说法,我的程序中有相当大的内存泄漏,但实际上我不认为是这样。或者也许我只是不知道某些事情。我是第一次使用 Valgrind,所以我可能解释错了,或者可能把它看得太重了。

无论如何,Valgrind 告诉我 ~13 MB(直接 56 字节,其余间接)肯定会丢失。有问题的代码如下所示:

Node* newRoot = malloc(sizeof(Node));
newRoot->children[0] = tree->root;
newRoot->children[1] = otherNode;
newRoot->k = 2;

tree->root = newRoot;
Run Code Online (Sandbox Code Playgroud)

您可能会说,我有一个树结构,其中树对象有一个根,一个节点有多个子节点。在这部分代码中,树被扩展到顶部;旧根成为新节点的子节点,然后成为新根。tree是 a Tree*root成员是一个节点指针,并且children是一个节点指针数组。

现在 Valgrind 告诉我上面分配的内存malloc丢失了,但在我的理解中,我从新根指向那个内存块,而旧根作为新根的子级保留。

在我的程序结束时,我递归地释放树中所有节点的内存(通过递归下降到所有子节点,从 开始root),所以我很确定内存最终被释放。

我错过了什么吗?有没有办法从 Valgrind 获取更详细的信息,以找出到底发生了什么(不)发生的事情?

c valgrind memory-leaks

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