标签: allegro5

致命错误LNK1169:游戏编程中发现的一个或多个多重定义符号

我一直在训练在c ++中使用面向对象的编程,但我一直收到这个错误:

1>main.obj : error LNK2005: "int WIDTH" (?WIDTH@@3HA) already defined in GameObject.obj
1>main.obj : error LNK2005: "int HEIGHT" (?HEIGHT@@3HA) already defined in GameObject.obj
1>Spaceship.obj : error LNK2005: "int WIDTH" (?WIDTH@@3HA) already defined in GameObject.obj
1>Spaceship.obj : error LNK2005: "int HEIGHT" (?HEIGHT@@3HA) already defined in GameObject.obj
1>C:\Users\ted\documents\visual studio 2010\Projects\fullSpace\Debug\fullSpace.exe : fatal error LNK1169: one or more multiply defined symbols found
Run Code Online (Sandbox Code Playgroud)

但是对我来说,似乎整个代码都是正确编写的,并且只在Global标头中提到了两个int,并且所有对象似乎都是正确继承的.然而,正如我刚才所说,我是OOP的初学者,所以我真的需要一个意见:值得一提的是我正在使用allegro 5创造一个侧射手.

这是代码:

(主要):

#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_font.h>
#include <allegro5\allegro_ttf.h>
#include <allegro5\allegro_audio.h>
#include <allegro5\allegro_acodec.h>

#include <list> …
Run Code Online (Sandbox Code Playgroud)

c++ oop allegro5

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

Allegro 5在调用al_clear_to_color(ALLEGRO_COLOR)时崩溃

我是从Allegro 5开始的,但很快我就陷入了第二个类似hello-world的程序中.经过一些调试后,我得出结论,程序在调用函数时崩溃了al_clear_to_color(ALLEGRO_COLOR).我已尝试静态和动态地链接allegro,但问题仍然存在.我完全迷失了.

这是代码:

#include <cstdio>
#include <allegro5/allegro.h>

int main() {
    ALLEGRO_DISPLAY         *display;
    ALLEGRO_KEYBOARD_STATE  kbState;

    if(!al_init())
        return 0;

    if(!al_install_keyboard())
        return 0;

    display = al_create_display(800, 600);
    if(!display)
        return 0;

    do {
        al_get_keyboard_state(&kbState);

        al_clear_to_color(al_map_rgb(255, 255, 255));

        al_flip_display();

        al_rest(0.5);
    } while(!al_key_down(&kbState, ALLEGRO_KEY_ESCAPE));

    al_destroy_display(display);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

替换线

al_clear_to_color(al_map_rgb(255, 255, 255));
Run Code Online (Sandbox Code Playgroud)

为线

al_clear_to_color(tempClearColor);
Run Code Online (Sandbox Code Playgroud)

声明

ALLEGRO_COLOR tempClearColor = al_map_rgb(255, 255, 255);
Run Code Online (Sandbox Code Playgroud)

在循环开始之前,它确实有效,但在函数崩溃时

al_destroy_display(display);
Run Code Online (Sandbox Code Playgroud)

叫做.

调试器返回消息:

读取C:\ Program Files(x86)\ CodeBlocks\MinGW\bin\libstdc ++ - 6.dll的共享库符号时出错:
编程接收信号SIGSEGV,分段错误.

c c++ runtime-error allegro allegro5

9
推荐指数
0
解决办法
1249
查看次数

程序入口点_gxx_personality_v0无法位于动态链接库libstdc ++中 - 6.dll错误

昨天我决定下载,安装并尝试使用Allegro 5.我还下载了Code :: Blocks 12.11 w/MinGW编译器.我设置了所有内容并正确安装了所有内容(或者我认为)并尝试运行示例代码以查看它是否可行:

#include <stdio.h>
#include <allegro5/allegro.h>

int main(int argc, char **argv){

   ALLEGRO_DISPLAY *display = NULL;

   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   display = al_create_display(640, 480);
   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }

   al_clear_to_color(al_map_rgb(0,0,0));

   al_flip_display();

   al_rest(10.0);

   al_destroy_display(display);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译并运行程序时,会出现一个错误消息框,指出"程序入口点_gxx_personality_v0无法位于动态链接库libstdc ++ - 6.dll中." 我在网上搜索了大约一个小时试图找到解决这个问题的方法,就像我对大多数事情一样,但我空手而归.我想知道是否有人对此问题的任何修复有任何想法,如果是这样,请尽快告诉我!提前致谢!

c++ mingw codeblocks windows-vista allegro5

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

Allegro 5 游戏:如何设置适合屏幕纵横比的分辨率?

使用 Allegro 5,如何在全屏模式下初始化游戏,使其符合屏幕格式(宽屏 16:9 与普通 3:4)

al_create_display (w, h)
Run Code Online (Sandbox Code Playgroud)

让我们选择您想要的任何比例。例如,无论屏幕大小如何,您都可以设置 640x480。但在宽屏显示器上看起来会很奇怪。你怎么知道使用哪个比率?

resolution fullscreen widescreen allegro5

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

Allegro 5游戏:游戏循环以恒定速度运行?

在Allegro 5中编写游戏循环的最佳方法是什么,它始终以相同的速度运行,并且正确地将绘图逻辑与更新逻辑分开?我应该使用线程吗?我应该使用新的Allegro事件系统吗?

c multithreading game-loop allegro5

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

需要一些帮助才能在Allegro 5,SDL 1.2,SDL 1.3或SFML之间进行选择

我不会开始讨论哪个库更好,它会违反规则,但更多的是提出一系列技术问题.当我问是否有特殊技术时,只需说出技术的名称或链接.

别忘了,我还要比较SDL 1.2和SDL 1.3,而不仅仅是其中之一

哪个库有多个窗口支持?我已经知道SDL的答案:SDL 1.2,不,但是是的

哪些库是多线程安全的?

大多数速度测试是在SDL和allegro使用软件加速时完成的,但现在SDL 1.3,allegro 5和sfml在速度方面使用硬件加速,它们如何比较?

哪个库可以同时检测多个键盘?有没有特殊的技术呢?

有没有办法将结果集成到GTK窗口中?如果是,是否有任何特殊技术?(我记得上次我使用SDL 1.2时,我无法做到这一点......)

哪个库支持3d?(使用openGL)

如果我将X库与OpenGL用于图形,是否会有限制,或者更多/更少的功能?(我的意思是,对于所有这些库,使用opengl的图形是否相同?)

我可以静态链接到哪些库?

最后,有些图书馆更倾向于特定的游戏风格吗?(像制作RPG时更喜欢使用X库,而制作策略游戏,基于游戏的游戏时更多使用Y库...)

不要忘记SDL 1.2和SDL 1.3

编辑:

我将尝试分享我发现的所有内容,从我的研究中,随时为我的问题提供更多答案.

多窗口:SDL 1.3,SFML无多窗口:SDL 1.2

多线程安全:Allegro 5,SFML

不是多线程安全:

速度:未知

不止一个按键支持:SFML,Allegro 5

c c++ sdl allegro5 sfml

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

使用 Allegro5 播放 C 语言的声音文件

我正在尝试用 allegro5 在 C 中播放 wav 文件,我写了下面的代码:

#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>

int main(int argc, char **argv){

    ALLEGRO_DISPLAY *display = NULL;


    if (!al_init()){
        fprintf(stderr, "failed to initialize allegro!\n");
        return -1;
    }

    if (!al_install_audio()){
        fprintf(stderr, "failed to initialize audio!\n");
        return -1;
    }

    if (!al_init_acodec_addon()){
        fprintf(stderr, "failed to initialize audio codecs!\n");
        return -1;
    }

    if (!al_reserve_samples(1)){
        fprintf(stderr, "failed to reserve samples!\n");
        return -1;
    }


    al_install_audio();
    al_init_acodec_addon();

    ALLEGRO_SAMPLE *sample = al_load_sample("bomb.wav"); //sample always NULL

    al_reserve_samples(1);

    if (!sample){
        printf("Audio clip sample …
Run Code Online (Sandbox Code Playgroud)

c audio allegro allegro5

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

如何调试使用调试信息编译的共享库

我正在使用调试simbols编译一个程序,该程序链接到也使用调试符号编译的共享库(liballegro).当我尝试进入这个共享库的一个函数时,我看不到任何代码.

file myBin 
mybin: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d4133ef127e81ffb007c4c17e10f4ddaefac6a0f, with debug_info, not stripped

file lib/liballegro-debug.so
liballegro-debug.so.5.2.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=dd75ca87e0ed86832ed02a1c40548a055ad4f551, with debug_info, not stripped
Run Code Online (Sandbox Code Playgroud)

GDB显示了如何使用调试信息加载此lib:

(gdb) info shared
From                To                  Syms Read   Shared Object Library
0x00007ffff7dd9b40  0x00007ffff7df5110  Yes (*)     /lib64/ld-linux-x86-64.so.2
0x00007ffff7a5a0d0  0x00007ffff7b84591  Yes         correct/path/to/liballegro-debug.so
0x00007ffff76ffd60  0x00007ffff7778eef  Yes (*)     /usr/lib/libm.so.6
0x00007ffff74e1640  0x00007ffff74eefb1  Yes (*)     /usr/lib/libpthread.so.0
[...]
Run Code Online (Sandbox Code Playgroud)

所以我在一个函数调用中放了一个断点,它位于共享库中(al_load_bitmap):

90      level->tileset.parent = al_load_bitmap(filename); …
Run Code Online (Sandbox Code Playgroud)

c debugging gdb allegro5 lldb

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

d3d-&gt;CreateDevice 中的 D3DERR_INVALIDCALL 导致 Allegro 5 D3D 程序启动时窗口闪烁

我正在调试在创建启用多重采样的 Allegro 5 Direct3D 窗口时窗口创建闪烁问题。我已将问题范围缩小到 allegro 的 d3d_disp.cpp 源文件中的窗口创建问题。但是,我无法从 DirectX 获得任何调试输出。闪烁仅发生在 D3D 模式(而非 OpenGL)下并且仅在启用多重采样时发生。另请注意,这只发生在 NVIDIA GPU 上运行程序时,而不是在我的集成 Intel 上运行程序时。

我运行的是 Windows 10。

我已尝试在 Visual Studio 2017 中对此进行调试,但它无法捕获 DX 的调试输出。我从 2010 年 6 月开始安装 DirectX SDK 时安装了 DirectX 调试符号。

我已经尝试重建 allegro 并链接到 gcc 中的 libd3dx9d.a,但我仍然无法进入 directx 函数调用,并且符号未加载。从 2010 年 6 月开始,MinGW-W64 GCC 8.1 或 DirectX SDK 中没有可用的 libd3d9d.a(注意 d 表示调试)库。

我尝试通过 PIX 运行我的程序,但它给了我一个无法解决的不兼容错误。

这是可测试的 allegro 5 示例代码:

#include <allegro5/allegro.h>
#include <allegro5/allegro_color.h>
#include <allegro5/allegro_primitives.h> 
#include <allegro5/allegro_direct3d.h>

#include <cstdio>
#include <climits>

int main(int …
Run Code Online (Sandbox Code Playgroud)

c++ debugging allegro5 visual-studio-debugging directx-9

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

C中架构x86_64的未定义符号

今天我为C安装了Allegro游戏编程库,我试图包含其中一个头文件但是当我尝试gcc -I./include example.c -o a.exe在终端中执行时,我不断收到此错误:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
     (maybe you meant: __al_mangled_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我使用以下说明安装了Allegro 5:https://wiki.allegro.cc/index.php?title = Install_Allegro5_From_GIT/OSX

example.c代码:

#include <stdio.h>
#include <allegro5/allegro.h>

int main(int argc, const char *argv[]){
    puts(“Hello, world!”);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c allegro5

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