我正在做一个快速增长的项目,保持目标文件的日期是没有选择的.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) 我是否必须通过glDelete*函数手动清理所有DisplayLists,Textures,(Geometry-)着色器等,或者当我的程序退出/崩溃时GPU mem是否会自动释放?
注意:GPU mem是指专用显卡上的专用内存,而不是CPU内存.
我有一个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) 我编译了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或类似的时,会调用什么例程来初始化引擎?
我迷迷糊糊关于这似乎是存在于所有数据的方法对象,如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
...?它是否与线程有关(听起来合理)?
感谢您的回答,如果您有实际知识,请回答.
我遇到了一个问题,我认为这是一个非常具体的问题.
我有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
简单和简短:GTK +最先进的OpenGL绑定是什么? 我更喜欢一个允许我使用类似于QGLWidget的小部件.
注意:我偶然发现了gtkglext,gtkglarea和clutter.我读了前两个有缺点/严重问题.
交叉使用外部工具链别名编译库的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
?
到目前为止尝试的东西(除了阅读适用的部分ld
和gcc
手册页):
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) 我想访问一个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个小时这样做,所以我感谢任何提示(除非你建议完全不同) .
一段时间以来,我现在非常繁琐,以便在一个响应良好的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) 我刚刚开始学习GTK。我正在查看gtk + 3.0.0的源代码,发现某些gtk对象类型的_get_type()方法的实现,但有些则没有此方法的实现,例如GtkRange
。有什么理由吗?据《 GObject参考手册》了解,_get_type()
方法在类型系统中注册对象类型。
根据 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 ×4
c++ ×3
opengl ×3
qt ×3
gtk ×2
memory-leaks ×2
backend ×1
buildroot ×1
c89 ×1
compilation ×1
cryptography ×1
flags ×1
glib ×1
gobject ×1
gpu ×1
gtk3 ×1
libgcc ×1
makefile ×1
mysql ×1
oop ×1
openssl ×1
qlist ×1
qt4 ×1
sql ×1
templates ×1
textures ×1
translucency ×1
transparent ×1
tree ×1
valgrind ×1
virtual ×1