如何link allegro5库到C++项目
How to link allegro5 library to C++ project
我有一个用 CodeBlocks 编写的 C++ 项目,但我不知道如何使用 allegro5 link 它。我想让人们能够在不安装任何库或包的情况下编译我的项目。所以我将从他们的网页下载的allegro目录放入项目文件夹中。接下来我包括库
#include "allegro/include/allegro5/allegro5.h"
但是当我尝试编译时出现错误
/home/stanek/ClionProjects/proj/guiMain.cpp:17: undefined reference to `al_install_system'
/home/stanek/ClionProjects/proj/guiMain.cpp:22: undefined reference to `al_create_display'
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_map_rgb'
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_clear_to_color'
/home/stanek/ClionProjects/proj/guiMain.cpp:30: undefined reference to `al_flip_display'
/home/stanek/ClionProjects/proj/guiMain.cpp:32: undefined reference to `al_rest'
/home/stanek/ClionProjects/proj/guiMain.cpp:34: undefined reference to `al_destroy_display'
这是我的 guiMain.cpp:
#include <iostream>
#include "allegro/include/allegro5/allegro5.h"
using namespace std;
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;
}
这是我的 CMakeList.txt
cmake_minimum_required(VERSION 3.3)
project(proj)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11")
set(SOURCE_FILES guiMain.cpp)
add_executable(projids ${SOURCE_FILES})
更新:
我已经在我的 CMakeList
中更改了设置
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 '")
但是我有一个错误:
Error:Configuration proj [Debug]
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -g -v -dD -E
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 5.3.0 (GCC)
和
Error:Configuration proj [Release]
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -O3 -DNDEBUG -v -dD -E
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 5.3.0 (GCC)
实际上,可以允许其他人玩您的游戏而无需在他们的系统上安装 allegro 库。
一种方法是静态地link您的可执行文件的静态版本
快板库。快板维基实际上有一个
tutorial
关于如何使用 Code::Blocks.
执行此操作
简而言之,static linkage直接包含了Allegro的必要部分
您的可执行文件,以便用户在 运行 时不必担心 linking
它。
另一种选择是使用动态 linkage,但是打包需要的动态
图书馆和你的游戏。例如,
您的游戏文件夹可能如下所示:
bin/
my_game.exe
liballegro.dll
liballegro_color.dll
...
然后用户可以 link 使用您提供的库,而不必担心他们的系统上安装了什么。
请注意,动态库通常以 .so
(Linux) 或 .dll
(Windows) 结尾,而静态库通常以 .a
.
编辑:
刚读到你说 编译 而不是 运行。如果您希望他们自己编译它,您将需要包含库或指导他们如何自己获取库。
我有一个用 CodeBlocks 编写的 C++ 项目,但我不知道如何使用 allegro5 link 它。我想让人们能够在不安装任何库或包的情况下编译我的项目。所以我将从他们的网页下载的allegro目录放入项目文件夹中。接下来我包括库
#include "allegro/include/allegro5/allegro5.h"
但是当我尝试编译时出现错误
/home/stanek/ClionProjects/proj/guiMain.cpp:17: undefined reference to `al_install_system'
/home/stanek/ClionProjects/proj/guiMain.cpp:22: undefined reference to `al_create_display'
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_map_rgb'
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_clear_to_color'
/home/stanek/ClionProjects/proj/guiMain.cpp:30: undefined reference to `al_flip_display'
/home/stanek/ClionProjects/proj/guiMain.cpp:32: undefined reference to `al_rest'
/home/stanek/ClionProjects/proj/guiMain.cpp:34: undefined reference to `al_destroy_display'
这是我的 guiMain.cpp:
#include <iostream>
#include "allegro/include/allegro5/allegro5.h"
using namespace std;
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;
}
这是我的 CMakeList.txt
cmake_minimum_required(VERSION 3.3)
project(proj)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11")
set(SOURCE_FILES guiMain.cpp)
add_executable(projids ${SOURCE_FILES})
更新: 我已经在我的 CMakeList
中更改了设置set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 '")
但是我有一个错误:
Error:Configuration proj [Debug]
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -g -v -dD -E
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 5.3.0 (GCC)
和
Error:Configuration proj [Release]
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -O3 -DNDEBUG -v -dD -E
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory
Using built-in specs.
COLLECT_GCC=/usr/bin/c++
Target: x86_64-unknown-linux-gnu
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 5.3.0 (GCC)
实际上,可以允许其他人玩您的游戏而无需在他们的系统上安装 allegro 库。
一种方法是静态地link您的可执行文件的静态版本 快板库。快板维基实际上有一个 tutorial 关于如何使用 Code::Blocks.
执行此操作简而言之,static linkage直接包含了Allegro的必要部分 您的可执行文件,以便用户在 运行 时不必担心 linking 它。
另一种选择是使用动态 linkage,但是打包需要的动态 图书馆和你的游戏。例如, 您的游戏文件夹可能如下所示:
bin/
my_game.exe
liballegro.dll
liballegro_color.dll
...
然后用户可以 link 使用您提供的库,而不必担心他们的系统上安装了什么。
请注意,动态库通常以 .so
(Linux) 或 .dll
(Windows) 结尾,而静态库通常以 .a
.
编辑:
刚读到你说 编译 而不是 运行。如果您希望他们自己编译它,您将需要包含库或指导他们如何自己获取库。