小编Mir*_*res的帖子

CMAKE - 如何正确地将静态库的头文件复制到/ usr/include中?

我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.

我的目标是:

  1. 这些库被编译并链接到*.a文件中.[这个作品]
  2. 然后我希望将*.a文件复制到/ usr/local/lib [这也是工作]
  3. 据我所知,库(很少),它们是使用链接-lnameoflib,这是一个编译器标志.好.我准备好了我的CMakeLists.txt,它实际上将*.a文件复制到/ usr/local/lib中.但是,为了能够在程序中使用它们,我还需要将它们的头文件复制到/ usr/include中,然后我可以轻松地将它们包含在内/usr/local/lib.这就是我现在理解的方式.

我的问题是 - 如何使用CMAKE将头文件复制到/ usr/include文件夹中的正确方法是什么?我想在/usr/local/include执行时自动复制它们,比如*.a文件.

对于这两个库,我有一个熟悉的CMakeLists.txt:

project(programming-network)

add_library(programming-network STATIC
    send_string.c
    recv_line.c
    )

INSTALL(TARGETS programming-network
        DESTINATION "lib"
        )
Run Code Online (Sandbox Code Playgroud)

c cmake static-libraries

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

Graphics.DrawImage对于更大的图像来说太慢了吗?

我正在制作游戏,我希望有一个带有背景图像的主菜单.

但是,我觉得这个方法Graphics.DrawImage()真的很慢.我做了一些测量.我们假设MenuBackground是我的资源图像,分辨率为800 x 1200像素.我将它绘制到另一个800 x 1200位图上(我首先将所有内容渲染到缓冲区位图,然后我将其缩放并最终将其绘制到屏幕上 - 这就是我如何处理多个玩家分辨率的可能性.但它不应该影响它以任何方式,见下一段).

所以我测量了以下代码:

Stopwatch SW = new Stopwatch();
SW.Start();

// First let's render background image into original-sized bitmap:

OriginalRenderGraphics.DrawImage(Properties.Resources.MenuBackground,
   new Rectangle(0, 0, Globals.OriginalScreenWidth, Globals.OriginalScreenHeight));

SW.Stop();
System.Windows.Forms.MessageBox.Show(SW.ElapsedMilliseconds + " milliseconds");
Run Code Online (Sandbox Code Playgroud)

结果让我感到惊讶 - Stopwatch两者之间的措施40 - 50 milliseconds.并且因为背景图像不是唯一要绘制的东西,所以整个菜单需要大约100毫秒才能显示,这意味着可观察到的延迟.

我试图将它绘制到Paint事件给出的Graphics对象,但结果是30 - 40 milliseconds- 没有太大的改变.

那么,这是否意味着,这Graphics.DrawImage()对于绘制更大的图像是不可用的?如果是这样,我该怎么做才能提高游戏性能?

c# gdi+ image c#-4.0

29
推荐指数
2
解决办法
2万
查看次数

Unicode存储在C char中

我现在正在Linux上学习C语言,我遇到了一些奇怪的情况.

据我所知,标准C的char数据类型是ASCII,1字节(8位).它应该意味着它只能包含ASCII字符.

在我使用的程序中char input[],它由getchar像这个伪代码的函数填充:

char input[20];
int z, i;
for(i = 0; i < 20; i++)
{
   z = getchar();
   input[i] = z;
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是它不仅适用于ASCII字符,而且适用于我想象的任何字符,例如@&@{??ž?¶'`[?????¶?^€~[?^ø{&}?ž输入.

我的问题是 - 怎么可能?它似乎是C中许多美丽的例外之一,但我真的很感激解释.这是操作系统,编译器,隐藏语言的附加超级功能吗?

谢谢.

c unicode ascii

18
推荐指数
5
解决办法
3万
查看次数

Netbeans Profiler的"自我时间"究竟意味着什么?

我一直对我的简单游戏需要运行感兴趣所以我使用了Netbeans Java Profiler(Java 1.7),我可以在"Hot Spots"选项卡中看到"Self Time"和"Invocations"列.

例如,我的render方法有:

自拍时间:1025毫秒

调用:2311

所以,如果我理解得很好,它实际上是否意味着所有渲染方法调用的总时间一起给出了1025毫秒,一个方法执行的平均时间是1025/2311 = 0.44毫秒

如果是这样,我可以强制IDE显示平均时间而不是总时间吗?

profiling netbeans

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

与3d应用程序的渲染器相比,为什么游戏渲染器如此之快?

我在过去几年里一直在Blender做一些3D图形,我也尝试制作3D游戏(在Unity 3D中).我也玩电脑游戏,我很惊讶一件事:

与游戏渲染器相比,为什么3D应用程序的渲染器如此"慢"?

这不是一个令人反感的问题.我只是好奇.例如,我可以无缝地玩Crysis或NFS:The Run,但是如果我在Blender中创建了一个类似的场景,我相信一帧的渲染将永远.

我在互联网上发现了一些信息(例如"因为游戏渲染器使用了很多假货和黑客"),但我不是图形程序员,我真的很感谢专家的回答.

algorithm graphics rendering game-engine

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

C - 为什么有人要将argv字符串复制到缓冲区?

我今天正在学习缓冲区溢出,我遇到了许多易受攻击的程序示例.令我好奇的是,如果有任何理由使用这样的程序参数:

int main(int argc, char *argv[])
{
    char argument_buffer[100];
    strcpy(argument_buffer, argv[1]);

    if(strcmp(argument_buffer, "testArg") == 0)
    {
        printf("Hello!\n");
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

而不是简单地:

int main(int argc, char *argv[])
{
    if(strcmp(argv[1], "testArg") == 0)
    {
        printf("Hello!\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意我知道strcpy等等的缺点- 这只是一个例子.我的问题是 - 是否有任何真正的理由使用临时缓冲区来存储来自argv的参数?我假设没有,但我很好奇,为什么它出现在溢出的例子中,而在现实中它从未被使用过?也许是因为纯理论.

c buffer-overflow argv

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

C++向量中向量的动态分配?

我现在正在工作,vector我有一个有趣的情况,我需要帮助.

我有一个矢量矢量,定义如下:

vector< vector<int> > list;
Run Code Online (Sandbox Code Playgroud)

我正在使用标准输入加载数字cin >> helpVar;,每当我得到0(零)时我想创建新的整数向量,这将被放入这个"主容器" list.

当然我不知道零号会出现多少次 - 这是用户所依赖的.所以我也不知道,程序会添加多少向量.

但我不知道,究竟是怎么做到的.如果我使用C#或其他类似垃圾收集的语言,我可能会写:

if(helpVar == 0)
{
   list.push_back(new vector<int>);
}
Run Code Online (Sandbox Code Playgroud)

但是这种结构在C++中不起作用.

所以我的问题是,我应该如何应对这种情况才能使其发挥作用?或者我只是想错了,它应该以另一种方式完成?

谢谢你的回答.

c++ stl

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