【问题标题】:Undefined symbols for architecture x86_64 in CC中架构x86_64的未定义符号
【发布时间】:2015-09-17 23:43:17
【问题描述】:

今天我为 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)

有什么想法吗?我使用此处的说明安装了 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;
}

【问题讨论】:

  • 为什么是*argv const?
  • @Navin:如果你愿意,你可以const它。没有人可以强迫你修改你的参数向量。
  • @EOF 我只是好奇,因为这不是通常的签名。

标签: c allegro5


【解决方案1】:

You need to link your executable to Allegro.

根据常见问题解答,您应该将 -lallegro 添加到您的编译命令中,或者在 OSX 上添加 -lallegro -lallegro_main

您可能需要其他标志,而 Allegro 5 使用 pkg-config 而不是 allegro-config,因此请pkg-config allegro-5.0 allegro_main-5.0 --cflags --libs 找出答案。

您可以使用反引号将其组合到编译器命令中,例如

$CC -W -Wall `pkg-config allegro-5.0 allegro_main-5.0 --cflags --libs` foo.c -o foo.exe

【讨论】:

  • 它有效,谢谢!但是,我从pkg-config 命令中注意到,allegro 的头文件位于/usr/local/include 中。编译时是否仍需要将其作为标志包含在内,或者该文件夹是否包含在PATH 中,因为它包含其他库的许多其他头文件?
  • @Calculus5000 这取决于编译器的搜索路径 - 例如,普通 *nix 平台上的 GCC 默认会在 /usr/local/include(和其他各种位置)中查找,除非您告诉它查找别处。我相信clang是一样的。因此,如果您使用的是 GCC 或 clang,则不需要将其作为标志包含。
  • 也可以简单解释一下pkg-config 命令的工作原理吗?
  • @Calculus5000 pkg-config 是一个非常标准的工具,可以在特定位置查找包含已安装包和库信息的元数据。通常它用于版本信息、链接器标志等。当您执行 make install(或等效的 xcode 命令或其他)时,发生的一件事是 Allegro 的元数据被复制到 pkg-config 检查该内容的位置(例如/usr/share/pkgconfig//usr/lib/pkgconfig/PKG_CONFIG_PATH 中的任何路径)。
  • 很棒的答案。如果它对其他人有帮助,这帮助我用 g++ 编译了一个类似的脚本。我能够通过运行g++ foo.cpp -o foo -lallegro_main -lallegro 进行编译。我必须同时拥有 -lallegro-lallegro_main
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2012-07-20
  • 2014-05-14
  • 2015-06-17
相关资源
最近更新 更多